Nginx
Nginx 令人困惑F一個stcg一世scrip噸n我和我____F一種s噸CG一世sCr一世p噸n一種米和在一世噸Hfastcgi_script_name withfastcgi_path_info
這是我的 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_name
is/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
變數