Nginx 和 PHP-FPM 带有子目录变量 - 发送文件而不是解析

Nginx 和 PHP-FPM 带有子目录变量 - 发送文件而不是解析

通过以下设置,我不知道如何让 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

分别在nginxphp-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 版本相关。

相关内容