Nginx übergibt URI nicht an php5-fpm, sondern dient als Textdatei

Nginx übergibt URI nicht an php5-fpm, sondern dient als Textdatei

wie oben angegeben wird die URI nicht an Nginx übergeben. Ich habe den gesamten „try“-Block eingefügt, um dies anzuzeigen.

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    set $page_to_view "/index.php";
    try_files $uri $uri.php $uri/;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}

Es heißt also im Wesentlichen: „Oh, hey, wir haben $uri.php erstellt und diese Datei existiert, lass sie uns servern, anstatt sie tatsächlich an PHP zu senden.“

und mein FPM-Anteil ist unten.

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
#   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;
#   # With php5-fpm:
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

So ziemlich alles wie im Original. Was ich also nicht verstehe, ist, warum in aller Welt nginx das nicht mehr macht. Ich weiß, dass es mit Fastcgi unter Debian funktioniert hat, aber jetzt nicht mehr, und ich habe meine alte Konfigurationsdatei aufgrund eines Festplattenabsturzes verloren, und es ist die einzige Datei, die ich nicht gesichert habe, bevor ich das Laufwerk zurückgeschickt habe, weil ich dachte, es wäre völlig in Ordnung, sie neu zu schreiben.

Antwort1

Sie sagen nicht, welche URI Sie laden möchten, aber ich gehe davon aus, dass sie nicht mit endet .php.

Ihr Problem hier ist, dass Sie die Anweisung nicht wörtlich nehmen, try_fileswie der Name vermuten lässt. Es ist speziell try aDatei.Es ist so dokumentiert, try_files file ... uri;dass nur das letzte Argument als Fallback behandelt wird, was zu einer internen Umschreibung führt. Alle Argumente vor dem letzten werden als statische Datei getestet und, falls gefunden, als statische Datei bereitgestellt.

Das heißt, Sie können es tun try_files $uri $uri/ $uri.php;, aber Sie können es nicht tuntry_files $uri $uri.php $uri/

Antwort2

versuchen Sie es zu ersetzen

location ~ \.php$ {

mit

location ~ \.php {

und $document_root mit dem tatsächlichen Verzeichnis, in dem die PHP-Datei abgelegt ist

zum Beispiel

fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;

verwandte Informationen