我托管了使用不同版本 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 知道正确提供应用程序的路径?
请随意推荐更好的容器设置来实现此目标。