Nginx 404 केवल php स्क्रिप्ट पर php-fpm का उपयोग करके फेंकता है


11

मैंने nginx+ का उपयोग करके एक परीक्षण सर्वर स्थापित किया है php-fpm। मैंने निम्नलिखित सभी की कोशिश की है:

Nginx + Php5-fpm php फ़ाइलों को प्रस्तुत नहीं कर रहा है

nginx + php fpm -> 404 php पृष्ठ - फ़ाइल नहीं मिली

PHP फ़ाइलों तक पहुँचते समय, nginx 404 त्रुटि फेंकता है

संक्षेप में मैंने क्या कोशिश की है:

  • फिर से स्थापित करने।
  • स्क्रिप्ट विशेषाधिकारों को बदलना (उन्हें बदलना 0777)।
  • fastcgi_intercept_errors on
  • चेक किए गए rootस्तरों पर निर्देश: server, locationऔर location ~ \.php
  • fastcgi_param SCRIPT_FILENAMEनिर्देश की जाँच की ।

सर्वर 404 पर (और केवल पर) .phpस्क्रिप्ट लौटाता है । मैं उनका नाम बदल सकता हूं .htmlऔर वे ठीक हो जाएंगे। मैं इस बारे में कैसे जा सकता हूं?

यह मेरा है nginx.conf:

user nginx;
worker_processes 1;

error_log  /var/log/nginx/error.log;

pid        /run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  2;

    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;

    server {
        listen       80;
        server_name  _;
        root         /var/www/html;

        location / {
            root /var/www/html;
            index index.php index.html index.htm;
        }

        error_page  404              /404.html;
        location = /40x.html {
            #root /var/www/html;
        }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            #root /var/www/html;
        }

        location ~ \.php$ {
            root           /var/www/html;
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }


    }

}

जवाबों:


14

उसे हल कर लिया। यह पता चला कि समस्या सॉकेट पर अनुमत अनुमतियाँ थी जहाँ php सुन रहा था। मैं सिर्फ एक निर्देश में कहा जाता बदलना पड़ा listen.modeपर/etc/php-fpm.d/www.conf

listen.mode = 0750

और उपयोगकर्ता को इसके लिए सेट करें nginx:

listen.owner = nginx
listen.group = nginx

तो फ़ाइल इस तरह दिखती है:

srwxr-x---. 1 nginx nginx 0 jul  8 08:59 /var/run/php5-fpm.sock

क्योंकि मैं एक tcp पोर्ट के बजाय एक यूनिक्स सॉकेट का उपयोग कर रहा था:

listen = /var/run/php5-fpm.sock;

इसके अलावा, मुझे इसके 404बजाय मिल रहा था 500या 503इसलिए कि मुझे कस्टम पृष्ठों पर त्रुटियों को पुनर्निर्देशित करने के लिए www.confकॉन्फ़िगर किया गया था , और चूंकि वे वहां नहीं थे, इसलिए मुझे मिल रहा था ।404

संपादित करें:

ऐसा प्रतीत होता है कि फेडोरा (फेडोरा 22, 23) में नगनेक्स वितरण के अधिकांश हाल के संस्करणों में, निगनेक्स डिफ़ॉल्ट रूप से अपाचे उपयोगकर्ता का उपयोग करता है, और सॉकेट उपयोगकर्ता अपाचे पर भी सेट होता है, इसलिए आगे कॉन्फ़िगरेशन की आवश्यकता नहीं है।


सही, आपको नियंत्रित करना होगा: - क्या उपयोगकर्ता / समूह नगनेक्स (या कोई वेबसर्वर) चलाते हैं - क्या उपयोगकर्ता / समूह php-fpm चलाते हैं
दिमित्री डबोवित्स्की

0

मुझे वास्तव में "नहीं मिली" त्रुटि मिली क्योंकि मैंने जो एक पुस्तक पढ़ी थी, उसने मुझे उस पथ के लिए एक गलत मिलान स्ट्रिंग दिया /php_statusथा जिसे मैंने php-fpm 7.0.x (वर्तमान में 7.0.19) और nginx 1.12 (वर्तमान में 1.12.0) में कॉन्फ़िगर किया था

यहाँ है /etc/php/7.0/fpm/pool.d/{config}

pm.status_path = /php_status

यहाँ के लिए विन्यास defaultहै /etc/nginx/sites-available(मैं Ubuntu पर हूँ)

server {
  listen 80 default;
  root /var/www;

  index index.html index.htm default.html;
  access_log /dev/null;
  error_log /dev/null;

  location / {
    try_files $uri $uri/ =404;
  }

  location /php_status {
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
    # fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
    include fastcgi_params;
    allow 127.0.0.1;
    deny all;
  }
}

नोट: निम्नलिखित को डिज़ाइन किया गया है जो कि /php_statusसार्वजनिक रूप से इंटरनेट पर उपलब्ध नहीं है (न ही डिफ़ॉल्ट होस्ट के लिए PHP सेवा या सेटअप है)। इसमें fastcgi_passtcp और यूनिक्स-सॉकेट php-fpm के लिए निर्देश भी शामिल है

आपको निम्न दो कमांड को भी चलाना चाहिए

sudo service nginx reload
sudo service php7.0-fpm restart

दौड़ने की कोशिश को सत्यापित करने के लिए

curl http://127.0.0.1/php_status
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.