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

配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:45:47