Nginx / FPM / PHP Alle PHP-Dateien sagen "Datei nicht gefunden".


8

Ich habe gerade Nginx 1.1.13 und PHP 5.4.0 auf einem Centos 5.8 Final 64bit Computer installiert. Nginx und PHP / Fpm werden ausgeführt, und ich kann PHP-Skripte über die ssh-Befehlszeile ausführen, aber im Browser wird immer wieder "Datei nicht gefunden" angezeigt. Fehler in allen meinen PHP-Dateien.

So kann meine nginx.conf PHP-Skripte verarbeiten:

      location ~ \.php$
      {
              root                    /opt/nginx/html;
              fastcgi_pass            unix:/tmp/fpm.sock;
              fastcgi_index           index.php;
              fastcgi_param           SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name;
              include                 fastcgi_params;
      }

Dies ist ein direktes Kopieren / Einfügen von meinen anderen Servern, wo es mit diesem Setup gut funktioniert (aber sie führen ältere Versionen von PHP / Fpm aus).

Warum bekomme ich diese Fehler?


1
Egal, es ist sortiert. Es war ein dummes Problem mit Berechtigungen.
Mr.Boon

Antworten:


17

Setzen Sie "include fastcgi_params;" vor allen "fastcgi_param *" Zeilen "include fastcgi_params;" überschreibt alle "fastcgi_param *" - Zeilen (siehe Nginx-Debug-Protokoll):

location ~ \.php$ {
    root                    /opt/nginx/html;
    fastcgi_pass            unix:/tmp/fpm.sock;
    fastcgi_index           index.php;
    include                 fastcgi_params;
    fastcgi_param           SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name;
}

3
Mann, ich habe 4 Stunden damit verschwendet und deine Antwort hat mir geholfen.
Experte

Ich habe seit gestern versucht, dieses Problem zu überwinden. Ihre Antwort hat mir sehr geholfen! Vielen Dank!!!
Kacper Kołodziej

1
Wie machen wir das, ohne den Pfad fest zu codieren? $ document_root vars scheint nicht wokring zu sein?
user1179459

3

Ich hatte das gleiche Problem.

Um dies zu lösen, habe ich den Benutzer überprüft, der nginx, php-fpm ausführt, und seine Berechtigungen für den Zugriff auf den Ordner überprüft, in dem sich das Stammverzeichnis befindet. Es ist die Standardeinstellung 'www-data'.

Sie können dies jedoch mit den Befehlen ps aux | grep php-fpmund herausfinden ps aux | grep nginx.

Sie müssen sicherstellen, dass der Ordner für den Benutzer zugänglich ist, der diese Prozesse ausführt.


Danke für den Hinweis. Ich habe versucht, meine Projekte tief in meinem Dropbox-Verzeichnis zu hosten, das standardmäßig 700 Berechtigungen hatte. Durch Ändern der Dropbox-Berechtigung in 755 wurde das Problem behoben.
Rodion Baskakov

1

Ich hatte das gleiche Problem und für mich war es eine falsch konfigurierte / nicht vorhandene "root" -Anweisung in der Nginx-Serverkonfiguration


1

Ich verwende eine solche Konfiguration und wünschte, sie könnte Ihnen helfen. Es funktioniert unter OS X. Für mich hat die Antwort von @Xosofox funktioniert. Ich habe die Version von nginx 1.6.2 als 1.2.6 falsch eingegeben, sodass das Stammverzeichnis zu einem nicht vorhandenen Verzeichnis wurde.

location ~ \.php$ {
    fastcgi_intercept_errors on;
    root           /usr/local/Cellar/nginx/1.6.2/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME /usr/local/Cellar/nginx/1.6.2/html$fastcgi_script_name;
}

0

Ich löse dieses Problem, indem ich Benutzer und Gruppe zum aktuellen Benutzer ändere: Gruppe in php-fpm.d / www.conf

Standardmäßig ist der Benutzer und die Gruppe 'nginx'. Ändern Sie dies ....

Hoffe das hilft

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.