我在 NGINX / PHP-FPM 容器情况下收到 FastCGI“主脚本未知”错误

1 nginx docker fpm

语境

我已经将这两个 docker 容器连接到网络:

  • php:8-fpm-alpine 与我的网络应用程序一起使用,公开端口 9000。
  • nginx:alpine 为应用程序提供服务。

两个容器都可以访问包含应用程序文件的本地目录。

我的 NGINX 配置:

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /usr/share/nginx/html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

尝试访问该站点时,浏览器显示“找不到文件。”。

NGINX 容器日志:

FastCGI 在 stderr 中发送:从上游读取响应标头时“主脚本未知”

PHP-FPM容器日志:

“获取/index.php”404

我检查过的事情

  • 应用程序正在运行。
  • NGINX 配置中的root实际上指向应用程序文件所在的位置。
  • 应用程序容器内的应用程序目录至少始终具有公共读取执行权限,这应该排除访问问题......对吗?
  • 网络中没有其他容器阻塞9000端口。

你能指点我一个方向吗?我迷路了。

Ric*_*ith 5

NGINX 容器可以看到该文件存在于,/usr/share/nginx/html/index.php否则该try_files语句将生成 404 响应而不是 PHP-FPM。

SCRIPT_FILENAME因此 PHP-FPM 容器已收到设置为 的请求,/usr/share/nginx/html/index.php但 PHP 无法使用该路径名查看该文件。

正如您的评论所确认的,这是两个容器之间的路径名路由的差异。