通过以下设置,我不知道如何让 nginx 将 CGI 请求传递给相应版本子目录中的索引脚本。相反,它将索引作为下载提供。
PHP-FPM 是一个链接的 docker 容器。
server {
listen 80;
root /var/www/html/public;
server_name _;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
index index.html index.htm index.debian-default.html index.php;
location ~ /(?<version>v.*)/ {
try_files $uri $uri/ /$version/index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
如果我嵌套代理位置块并将脚本文件名更改为:
fastcgi_param SCRIPT_FILENAME $document_root/$version/$fastcgi_script_name;
当我查询时,http://localhost/v1/
我得到
nginx_1 | 2021/05/19 07:19:28 [error] 29#29: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.26.0.1, server: _, request: "GET /v1/ HTTP/1.1", upstream: "fastcgi://172.26.0.2:9000", host: "localhost:9081"
nginx_1 | 172.26.0.1 - - [19/May/2021:07:19:28 +0000] "GET /v1/ HTTP/1.1" 404 27 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
php-fpm_1 | 172.26.0.3 - 19/May/2021:07:19:28 +0000 "GET /v1/index.php" 404
分别在nginx
和php-fpm
日志中。
答案1
使用提示这个答案,我将 nginx 配置更改为
location ~ /(?<version>v.*)/ {
try_files $uri $uri/ /$version/index.php$is_args$args;
location ~ ^(.*\.php)(.*)$ {
...
fastcgi_param SCRIPT_FILENAME $document_root$1;
...
}
}
并且它开始按预期工作。
答案2
你的fastcgi_参数应该:
fastcgi_pass 127.0.0.1:9000;
如果您在本地运行 php-fpm。如果您以套接字形式运行 php-fpm:
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
一定要更换php7.3与您的 php 版本相关。