Nginx 不將 uri 傳遞給 php5-fpm,而是作為文字檔案

Nginx 不將 uri 傳遞給 php5-fpm,而是作為文字檔案

如上所述,uri 不會傳遞給 nginx。我已經包含了整個“嘗試”塊來展示這一點。

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
}

所以它本質上是在說“哦嘿,我們做了 $uri.php 並且該文件存在,讓我們對其進行伺服器處理,而不是實際將其發送到 php。”

我的 fpm 部分如下。

# 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;
}

庫存還蠻多的所以我不明白的是為什麼 nginx 不再這樣做了。我知道它可以在debian 下與fastcgi 配合使用,但現在不行了,而且由於HDD 崩潰,我丟失了舊的配置文件,這是我在將驅動器發回之前沒有備份的一個文件,因為我認為它會是這樣完全可以重寫它。

答案1

您沒有說明您要加載的 URI,但我假設它不會以.php.

這裡的問題是,您沒有try_files按照名稱所暗示的字面意思來理解該指令。這是專門嘗試一個文件。它被記錄為try_files file ... uri;意味著只有最後一個參數才會被視為導致內部重寫的回退。最後一個參數之前的任何參數都將作為靜態文件進行測試,如果找到,則將其用作靜態文件。

這意味著你可以做try_files $uri $uri/ $uri.php;但你不能做try_files $uri $uri.php $uri/

答案2

嘗試更換

location ~ \.php$ {

location ~ \.php {

和 $document_root 以及放置 php 檔案的實際目錄

對於前。

fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;

相關內容