Nginx wirft 404 nur auf PHP-Skripten mit PHP-Fpm


11

Ich habe einen Testserver mit nginx+ installiert php-fpm. Ich habe Folgendes versucht:

Nginx + Php5-fpm rendert keine PHP-Dateien

nginx + php fpm -> 404 php pages - Datei nicht gefunden

Beim Zugriff auf PHP-Dateien gibt nginx einen 404-Fehler aus

Zusammenfassend, was ich versucht habe:

  • Neuinstallation.
  • Ändern der Skriptberechtigungen (geändert in 0777).
  • fastcgi_intercept_errors on.
  • Überprüfte die rootDirektive auf den Ebenen : server, locationund location ~ \.php.
  • Überprüfte die fastcgi_param SCRIPT_FILENAMERichtlinie.

Der Server gibt 404 für (und nur für) .phpSkripte zurück. Ich kann sie umbenennen .htmlund es würde ihnen gut gehen. Wie kann ich das machen?

Das ist mein 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;
        }


    }

}

Antworten:


14

Ich habe es gelöst. Es stellt sich heraus, dass das Problem die Berechtigungen waren, die für den Socket festgelegt wurden, an dem PHP abgehört hat. Ich hatte gerade eine Richtlinie zu ändern , rief listen.modeauf/etc/php-fpm.d/www.conf

listen.mode = 0750

Und stellen Sie den Benutzer auf nginx:

listen.owner = nginx
listen.group = nginx

Die Datei sieht also so aus:

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

Weil ich einen Unix-Socket anstelle eines TCP-Ports verwendet habe:

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

Außerdem bekam ich 404anstelle von 500oder 503weil meine www.confso konfiguriert war, dass Fehler auf benutzerdefinierte Seiten umgeleitet wurden , und da sie nicht vorhanden waren, bekam ich404 .

Bearbeiten:

Es scheint, dass in den neuesten Versionen der Nginx-Distribution in Fedora (Fedora 22, 23) nginx standardmäßig den Apache-Benutzer verwendet und der Socket auch auf den Benutzer-Apache eingestellt ist, sodass keine weitere Konfiguration erforderlich ist.


Richtig, Sie müssen steuern: - Welcher Benutzer / welche Gruppe Nginx (oder einen beliebigen Webserver) ausführen - Welcher Benutzer / welche Gruppe
Php-Fpm ausführen

0

Ich habe tatsächlich den Fehler "Nicht gefunden" erhalten, weil ein Buch, das ich gelesen habe, mir eine falsche übereinstimmende Zeichenfolge für den Pfad gab, /php_statusden ich in php-fpm 7.0.x (derzeit 7.0.19) und in nginx 1.12 (derzeit 1.12.0) konfiguriert hatte.

Hier ist das /etc/php/7.0/fpm/pool.d/{config}

pm.status_path = /php_status

Hier ist die Konfiguration für defaultin /etc/nginx/sites-available(ich bin auf 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;
  }
}

Hinweis: Das Folgende ist so konzipiert, dass /php_statuses im Internet nicht öffentlich verfügbar ist (noch wird PHP bereitgestellt oder für den Standardhost eingerichtet). Es enthält auch eine fastcgi_passDirektive für TCP und Unix-Socket PHP-Fpm

Sie sollten auch die folgenden zwei Befehle ausführen

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

Um dies zu überprüfen, versuchen Sie es

curl http://127.0.0.1/php_status
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.