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?

Mr.Boon
quelle
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;
}
mingalevme
quelle
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.

miog
quelle
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

Xosofox
quelle
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;
}
Hangchen Yu
quelle
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

Pedro Vasconcelos
quelle