You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik代理Docker环境下Nginx出现Primary script unknown交替报错问题

问题根因分析

首先明确两个核心问题指向,结合交替报错的特征,原因分为两类:

  1. Nginx 配置逻辑冲突:api 域名的 / 路径块同时配置了 proxy_pass http://app:9000 和 try_files 规则,而 app 容器的 9000 端口运行的是 PHP-FPM 服务,仅支持 FastCGI 协议,不支持 HTTP 协议,配置本身存在逻辑错误。
  2. Traefik 路由多后端冲突:交替出现正常/报错的最典型诱因是同一条 Traefik 路由绑定了多个后端服务,流量按负载均衡策略轮询分发到不同容器,其中一个容器配置正常,另一个配置错误/版本不匹配。

排查解决步骤

第一步:修复 Nginx 配置错误

api 域名的 / 路径下不需要配置反向代理到 PHP-FPM 端口,删掉所有 proxy_ 开头的冗余配置,修改后如下:

location / {
    try_files $uri /index.php?$query_string;
    proxy_cache_bypass    $http_upgrade;
    gzip_static on;
}

修改配置后重启 Nginx 容器:

docker restart tef-nginx

第二步:排查 Traefik 多后端问题

  1. 检查当前运行的容器,确认是否有冗余的同业务 Nginx/PHP 容器:
docker ps | grep tef

如果存在多余的旧版本容器,直接删除:

docker rm -f <旧容器ID>
  1. 确认 Traefik 路由绑定的后端数量:
    访问 Traefik 自带的 Dashboard,查看 tefm-nginx 路由器对应的 Service 下的后端实例,确认仅存在一个 tef-nginx 容器实例。如果存在多个实例,清理旧容器后刷新 Traefik 配置即可。

第三步:验证 PHP 路径与权限

如果上述步骤执行后仍存在 Primary script unknown 报错,验证路径与权限配置:

  1. 确认 PHP 容器内存在入口文件:
docker exec tefm-app ls /usr/share/nginx/html/webapp/public/index.php

如果返回文件不存在,检查 docker-compose 中 app 服务的 volumes 挂载配置是否正确。
2. 确认 PHP-FPM 运行用户有文件读取权限:

# 查看PHP-FPM运行用户
docker exec tefm-app ps aux | grep php-fpm
# 查看文件权限
docker exec tefm-app ls -l /usr/share/nginx/html/webapp/public/index.php

如果权限不匹配,修改文件权限或者调整 PHP-FPM 运行用户即可。


内容的提问来源于stack exchange,提问作者Neto Braghetto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:06:01