Nginx

Nginx 令人困惑F一個stcg一世scrip噸n我和我____F一種s噸CG一世sCr一世p噸n一種米和在一世噸Hfastcgi_script_name withfastcgi_path_info

  • July 11, 2018

這是我的 Nginx 配置文件的相關部分:

http {
   log_format  fastcgi
               '$remote_addr - $remote_user [$time_local] "$request" '
               '$status $body_bytes_sent "$http_referer" '
               '"$fastcgi_script_name" "$fastcgi_path_info"';

   server {
       listen       8080;
       server_name  localhost;

       access_log  /usr/local/var/log/nginx/access.log  fastcgi;

       location / {
           fastcgi_index /;
           fastcgi_pass unix:/usr/local/var/www/run/httpd.sock;
           include fastcgi_params;
       }
   }
}

基本上我有一個/usr/local/var/www/run/httpd.sock處理 FastCGI 請求的 Unix 套接字,它工作得很好。這裡的問題是 Nginx 認為 URI 的最後一部分是腳本名稱,但它應該是路徑資訊。例如

⇒ nginx -v
nginx version: nginx/1.15.0
⇒ nginx
⇒ curl -i localhost:8080/index
HTTP/1.1 200 OK
Server: nginx/1.15.0
Date: Tue, 10 Jul 2018 12:27:15 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive

<p>hello, world</p>
⇒ tail -n 1 /usr/local/var/log/nginx/access.log
127.0.0.1 - - [10/Jul/2018:20:27:15 +0800] "GET /index HTTP/1.1" 200 30 "-" "/index" ""

這意味著$fastcgi_script_nameis /index$fastcgi_script_name是一個空字元串。

如何配置 Nginx 以使其$fastcgi_script_name包含 URI 的最後一部分,例如/index

首先在您的位置塊中,您有此指令include fastcgi_params;

因此,大概在與您的 nginx.conf 相同的目錄中,您會找到一個名為 fastcgi_params 的文件,該文件將包含與此類事物相關的大量配置選項,因此請先檢查一下。

如果這就是你想要的,那麼你可以在你的 location 塊中使用fastcgi_split_path_info指令來定義來自請求 uri 的兩個正則表達式擷取,一個用於fastcgi_path_info變數,另一個用於fastcgi_script_name變數

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