Nginx + Php5-fpm rendert keine PHP-Dateien

8

Ich habe Stunden damit verbracht herauszufinden, wie man Nginx + Ruby Enterprise Edition + PHP5-fpm und MYSQL installiert. Endlich ist alles installiert und alles scheint gut angefangen zu haben.

Aber aus irgendeinem Grund werden PHP-Dateien nicht verarbeitet.

.html-Dateien funktionieren einwandfrei, aber wenn ich versuche, eine .php-Datei anzuzeigen, sieht es so aus, als ob sie nicht existiert, obwohl dies der Fall ist. Interessanterweise erhalte ich beim Versuch, eine nicht vorhandene HTML-Datei anzuzeigen, eine nette Nginx 404-Nachricht, aber wenn ich eine .php-Datei ansehe, gibt sie mir diese nicht einmal.

Nach meinem Anfängerverständnis sieht es also so aus, als ob entweder etwas mit der Konfiguration nicht stimmt oder Nginx und PHP-fpm nicht miteinander sprechen.

Ich habe mir so viele andere Beispiele für Nginx-Konfigurationsdateien angesehen und bin mir sicher, dass diese Seite in Ordnung ist. Nun ... hier ist sowieso das relevante Bit der conf-Datei:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

Und

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

Jede Hilfe wird sehr geschätzt.

edit : Hier sind die Header, die aus der Test-PHP-Datei " http://eman.id.au/test.php " zurückgegeben werden:

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

Emmanuel
quelle

Antworten:

10

Ich glaube, ich bin heute auf genau das gleiche Problem gestoßen. Nginx sendet die Anfrage an php-fpm (wie im Header angegeben), aber Sie erhalten eine 404, obwohl die Datei existiert und überhaupt keinen (PHP / Syntax-) Fehler aufweist. und in keinem Protokoll (ngins oder php-fpm) werden Fehler angezeigt.

Sie haben Ihre vollständige Nginx-Konfiguration nicht angegeben, aber ist es möglich, dass Sie die Option "root" nicht (richtig?) In Ihrem Abschnitt "Server" definieren? Sie müssen sicherstellen, dass es auf den richtigen Speicherort von c verweist und sich innerhalb des Abschnitts "Server" befindet, nicht innerhalb eines Abschnitts "Standort" - z.

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}
Fred
quelle
Ich bin nicht sicher, aber das könnte das Problem gewesen sein
Emmanuel
Am Ende habe ich das VPS neu erstellt und es erneut mit einem anderen Tutorial versucht. Jetzt funktioniert es einwandfrei. :)
Emmanuel
Dies funktionierte für mich und ich verwendete einen Unix-Socket für den Parameter fastcgi_pass
Sean
1

Wenn Sie sich die Header ansehen, mit denen http://eman.id.au/test.php antwortet, werden Sie sehen X-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1. Dies würde nicht angezeigt, wenn die Anforderung nicht an PHP übergeben würde. Wenn PHP den übergebenen Dateipfad nicht finden kann, wird der Fehler wiederholtNo input file specified.

Da Ihre Site den Header "powered by" ausgibt und den No input file specified.Fehler nicht aufweist, liegt der wahrscheinlichste Grund darin, dass Sie einen Fehler in Ihrem PHP-Skript haben und Anzeigefehler deaktiviert sind. Dies führt zu einer leeren Seite und einem Eintrag in Ihrem Fehlerprotokoll. Schauen Sie also dort nach, ob es nicht voll ist.

Martin Fjordvald
quelle
Ah, das tut es auch !! Ich habe die Seite in Google Chrome angezeigt und es gab nur einen 404-Fehler, aber ich habe sie gerade in Firefox angezeigt und es ist nur eine leere Seite. Es gibt keine Fehler im PHP-Skript. Tatsächlich habe ich gerade alles PHP herausgenommen und der einzige Inhalt davon ist ein h1-Tag
Emmanuel
Ich habe meinen ursprünglichen Beitrag mit den http-Headern der Datei test.php aktualisiert
Emmanuel
Und Sie sind absolut sicher, dass sich Ihre Skripte in / var / www / eman / befinden und dass der Pfad und die Dateien vom PHP-Prozess gelesen und ausgeführt werden können?
Martin Fjordvald
Ja, es handelt sich um die Skripte, die sich definitiv in / var / www / eman / befinden. Die Datei test.php befindet sich im selben Verzeichnis wie index.html, was einwandfrei funktioniert. Was muss ich überprüfen, um sicherzustellen, dass sie vom PHP-Prozess gelesen und ausgeführt werden können? Da bin ich mir nicht sicher?
Emmanuel
Nun, Sie spawnen PHP auf irgendeine Weise entweder über spawn-fcgi oder php-fpm. Die Konfigurationsdatei oder der Befehl, die zum Spawnen verwendet werden, sollten den Benutzer des Prozesses enthalten. Danach müssen Sie die Linux-Berechtigung für diesen Benutzer überprüfen.
Martin Fjordvald
0

Ein paar Gedanken:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

Benötigt dies einen zusätzlichen Schrägstrich?

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINX hat auch ein seltsames Caching-Problem. Wenn Sie also die URL in Ihrem Browser ausprobieren, fügen Sie am Ende ein? Random = 12391 hinzu, um eine Aktualisierung zu erzwingen. Ich war 30 Minuten lang verwirrt über eine Konfiguration, nur um festzustellen, dass sie die ganze Zeit funktionierte, aber ich wurde vom Cache gestolpert.

Sie möchten wahrscheinlich auch ein bisschen besser aus Ihrem Standort entkommen (obwohl dies nicht das Problem verursacht, das Sie haben). Es ist eine bessere Übung:

location ~ .php$

zu

location ~ \.php$

.php $ würde mit einer Anfrage wie yourpagephp übereinstimmen und nicht nur mit yourpage.php

Andrew Taylor
quelle
Okay, ich habe die conf-Dateien bearbeitet, aber ich habe kein Glück ...
Emmanuel
Die URL lautet: eman.id.au/test.php, eman.id.au selbst funktioniert gut auf index.html
Emmanuel
Das Caching ist nicht wahr, Nginx speichert nichts zwischen, was Sie nicht ausdrücklich sagen. Es ist NICHT wie bei Apache, Änderungen an der Konfigurationsdatei erfordern jedoch ein erneutes Laden der Konfigurationsdatei. Außerdem wird Ihr Browser Anfragen zwischenspeichern, sodass Sie ihn möglicherweise damit verwechseln.
Martin Fjordvald