我在 NGINX / PHP-FPM 容器情况下遇到 FastCGI "Primary script unknown" 错误
I get FastCGI "Primary script unknown" error in a NGINX / PHP-FPM containers situation
上下文
我已将这两个 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;
}
}
问题
尝试访问站点时,浏览器显示“找不到文件”。
NGINX 容器日志:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
PHP-FPM容器日志:
"GET /index.php" 404
我检查过的东西
- 应用是 运行。
NGINX 配置中的 - root 实际上指向应用程序文件所在的位置。
- App 目录,在应用容器内,至少有 public read 和 execute 权限,应该排除访问问题...对吗?
- 网络阻塞9000端口没有其他容器
你能给我指明方向吗?我迷路了。
NGINX 容器可以看到文件存在于 /usr/share/nginx/html/index.php
否则 try_files
语句将生成 404 响应而不是 PHP-FPM。
因此 PHP-FPM 容器已收到 SCRIPT_FILENAME
设置为 /usr/share/nginx/html/index.php
的请求,但 PHP 无法看到使用该路径名的文件。
正如您的评论所证实的那样,这是两个容器之间路径名路由的差异。
上下文
我已将这两个 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;
}
}
问题
尝试访问站点时,浏览器显示“找不到文件”。
NGINX 容器日志:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
PHP-FPM容器日志:
"GET /index.php" 404
我检查过的东西
- 应用是 运行。 NGINX 配置中的
- root 实际上指向应用程序文件所在的位置。
- App 目录,在应用容器内,至少有 public read 和 execute 权限,应该排除访问问题...对吗?
- 网络阻塞9000端口没有其他容器
你能给我指明方向吗?我迷路了。
NGINX 容器可以看到文件存在于 /usr/share/nginx/html/index.php
否则 try_files
语句将生成 404 响应而不是 PHP-FPM。
因此 PHP-FPM 容器已收到 SCRIPT_FILENAME
设置为 /usr/share/nginx/html/index.php
的请求,但 PHP 无法看到使用该路径名的文件。
正如您的评论所证实的那样,这是两个容器之间路径名路由的差异。