配置Docker中Nginx与其他容器通信遇504错误求助
Docker Nginx反向代理504错误排查方案
先确认后端端口是否匹配
Nginx配置里写的是proxy_pass app_php:80/,但PHP容器大概率不是在80端口运行的——比如PHP-FPM默认监听9000端口,或者你的应用本身指定了其他端口。
- 进入PHP容器执行
netstat -tulpn(没装工具的话先跑apt install net-tools),查看是否有进程在监听80端口。 - 如果后端是PHP-FPM,不能用
proxy_pass,得换成fastcgi_pass配置,示例:location / { fastcgi_pass app_php:9000; fastcgi_param SCRIPT_FILENAME /var/www/html/index.php; # 替换为你的应用实际路径 include fastcgi_params; }
增加Nginx代理超时时间
504错误本质是Nginx等待后端响应超时,给配置添加超时参数试试:
location / { proxy_pass app_php:80/; proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; }
修改完成后,重启Nginx容器或者执行docker exec <nginx容器名> nginx -s reload让配置生效。
直接测试后端服务可用性
从Nginx容器内执行curl app_php:80,看能否获取正常的HTTP响应。如果curl也超时或报错,说明问题出在PHP应用本身,和Nginx无关——先检查PHP容器是否正常启动,查看应用日志排查报错。
检查Nginx模板生成的最终配置
你挂载了templates目录到/etc/nginx/templates,容器会自动将.template文件转换为.conf配置文件。进入Nginx容器查看/etc/nginx/conf.d下的最终配置,确认proxy_pass地址没有被错误替换。
验证TCP连接是否正常
ping通不代表TCP端口能建立连接,从Nginx容器执行nc -zv app_php 80(没装nc的话先跑apt install netcat),检查端口是否能正常连通。如果连不上,回到第一步重新确认后端监听端口。
内容的提问来源于stack exchange,提问作者Sławomir B
相关产品推荐
相关产品推荐

