fastcgi_pass在docker中应指向php-fpm容器的服务名加端口,如fastcgi_pass php-fpm:9000;若用unix socket则需挂载并确保权限一致,且必须配合include fastcgi_params和正确拼接script_filename。

fastcgi_pass 指向哪里?别写 127.0.0.1:9000
在 Docker 环境中,fastcgi_pass 127.0.0.1:9000 几乎必然失败——容器内 127.0.0.1 指向自己,不是 PHP-FPM 容器。Nginx 容器必须通过服务名访问 PHP-FPM 容器。
正确写法是:fastcgi_pass php-fpm:9000(前提是 docker-compose.yml 中 PHP-FPM 服务名为 php-fpm)。
- 检查
docker-compose.yml的 services 名称,确保 Nginx 配置中的 host 与之完全一致(大小写、连字符均敏感) - 若用 Unix socket(如
/var/run/php/php8.2-fpm.sock),需将 socket 文件路径挂载进 Nginx 容器,并确认权限:PHP-FPM 进程用户(如www-data)和 Nginx worker 用户需能读写该 socket - Docker 内部 DNS 解析失败时,
connect() failed (111: connection refused)是典型表现;先运行docker exec -it nginx ping php-fpm验证网络连通性
root 和 index 必须指向 public/ 目录
Symfony 的 Web 入口统一收口在 public/,Nginx 的 root 值错一格,就会 403 或 404。
常见错误配置:root /var/www/html;(指向项目根目录)→ 应该是 root /var/www/html/public;。
-
index必须显式设为index.php,不能依赖默认值 -
location /块里必须有try_files $uri $uri/ /index.php?$query_string;,否则静态资源(CSS/JS)可能被 PHP 处理,或路由 fallback 失效 - 禁止通过 Nginx 暴露
.env、var/、config/等路径:在 server 块中加location ~ /\.(env|git|log|lock)$ { deny all; }
fastcgi_param SCRIPT_FILENAME 必须动态拼接
SCRIPT_FILENAME 是 PHP-FPM 找到真实 PHP 文件的关键参数。硬编码路径(如 /var/www/html/public/index.php)在容器或不同部署路径下会失效。
正确做法永远用变量组合:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;。
-
$document_root来自root指令,$fastcgi_script_name来自请求 URI,二者拼接才准确 - 漏掉
include fastcgi_params;会导致大量 fastcgi_param 缺失(如QUERY_STRING、REQUEST_METHOD),引发 Symfony 路由解析失败或$_POST为空 - 不要手动覆盖
SCRIPT_NAME或PATH_INFO,除非你明确在调试 PATH_INFO 路由兼容问题
生产环境必须禁用 debug 并关闭 .env 泄露风险
Nginx 配置再正确,debug: true 或暴露 .env 仍会让应用处于高危状态。
- 确认
config/packages/prod/framework.yaml中debug: false已设置(Symfony 6+ 默认已关,但旧项目易遗漏) -
.env文件不能被 Web 访问:Nginx 需加location ~ /\.env { deny all; },且部署时确保其不在public/下 - 避免使用
php bin/console server:run上线:它只是开发服务器,无并发能力、无静态文件处理、不校验 HTTPS 头,线上必须走 Nginx + PHP-FPM
最常被跳过的一步是验证 PHP-FPM 是否真正响应——直接在 Nginx 容器里执行 curl -v http://php-fpm:9000 没意义(FPM 不监听 HTTP),应改用 php-fpm -t 检查配置,或用 netstat -tuln | grep :9000 确认端口监听状态。容器间通信的“看不见”问题,永远比语法错误更难定位。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











