使用独立 PHP-FPM 服务器时处理 Nginx 位置别名

使用独立 PHP-FPM 服务器时处理 Nginx 位置别名

我托管了使用不同版本 PHP 的各种 Laravel 应用程序,并决定通过多个 PHP-FPM 容器(每个 PHP 版本一个)来改进当前的单一臃肿容器 Docker 设置。

/var/www/html/index.php我通过将 PHP 文件安装到所有容器来测试设置,并且它可以按预期工作。

但是,由于 Laravel 应用程序是从public子目录提供的,因此当 PHP 容器尝试查找该文件时会导致问题。

这是 Nginx 配置:

location /appname/ {
        alias /var/www/html/appname/public;
        index index.php;

        # Use PHP 7
                location ~ \.php$ {
                        fastcgi_pass php74:9007;
                        fastcgi_index index.php;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                }
    }

因此,对 的请求/appname/index.php实际上是从 得到的/var/www/html/appname/public,但 PHP 容器不知道这一点,也找不到该文件。

我尝试$document_root/var/www/html/appname/public或替换/appname/public,但都没有效果。

这是 PHP-FPM 抛出的错误:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

我该如何让 PHP 知道正确提供应用程序的路径?

请随意推荐更好的容器设置来实现此目标。

答案1

location和值都alias应该有一个/尾随正确操作

使用alias指令时,使用:

fastcgi_param  SCRIPT_FILENAME $request_filename;

相关内容