以下是我的 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;
}
}
}
基本上,我有一个 Unix 套接字,用于/usr/local/var/www/run/httpd.sock
处理 FastCGI 请求,它工作得很好。这里的问题是 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
是/index
,$fastcgi_script_name
是一个空字符串。
如何配置 Nginx 以使其$fastcgi_script_name
包含 URI 的最后一部分,即类似的/index
?
答案1
首先,在您的位置块中,您有此指令include fastcgi_params;
因此,大概在与 nginx.conf 相同的目录中,您会找到一个名为 fastcgi_params 的文件,它将包含大量与此类事情相关的配置选项,因此请先检查该文件。
如果这就是你想要的,那么你可以使用fastcgi_split_path_info指令在您的位置块中定义两个来自请求 uri 的正则表达式捕获,一个用于变量fastcgi_path_info
,另一个用于fastcgi_script_name
变量