我托管了使用各种版本的 PHP 的各种 Laravel 应用程序,并决定通过拥有多个 PHP-FPM 容器来改进当前的单一臃肿容器 Docker 设置,每个 PHP 版本一个。
我通过将一个 PHP 文件安装到所有容器来测试设置/var/www/html/index.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
or替换/appname/public
,但都没有用。
这是 PHP-FPM 抛出的错误:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
我该如何让 PHP 知道为应用程序提供正确服务的路径?
随意推荐一个更好的容器设置来实现这个目标。
location
和值都alias
应该有一个正确操作/
的尾随。使用
alias
指令时,请使用: