Nginx

Nginx 沒有將 uri 傳遞給 php5-fpm,而是作為文本文件

  • December 24, 2013

如上所述,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 但現在不是完全可以重寫它。

你沒有說你要載入什麼 URI,但我會假設它不會以.php.

您在這裡的問題是您並沒有try_files像名稱所暗示的那樣從字面上理解該指令。它是專門嘗試一個**文件。**它被記錄為try_files file ... uri;意味著只有最後一個參數將被視為導致內部重寫的備份。最後一個參數之前的任何參數都作為靜態文件進行測試,如果找到,則作為靜態文件提供。

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

引用自:https://serverfault.com/questions/563294