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

部署Django-Docker-Nginx项目遇Nginx 502错误求助

排查Nginx 502 Bad Gateway(uWSGI连接拒绝)问题

核心问题定位

Nginx容器无法连接到上游uWSGI服务(uwsgi://my_ip:9000),SSL证书验证通过仅说明HTTPS层面配置正常,问题出在容器间的上游服务连接环节。

分步排查方案

1. 验证uWSGI服务状态

  • 查看Django容器日志,确认uWSGI是否成功启动:
    docker logs <你的Django容器名称>
    
    重点排查是否有端口绑定失败、Django项目加载报错等信息。
  • 进入Django容器,检查9000端口是否被监听:
    docker exec <你的Django容器名称> netstat -tulpn | grep 9000
    
    确保输出显示0.0.0.0:9000(监听容器所有网络地址),而非127.0.0.1:9000(仅容器本地可访问)。

2. 修正Docker网络与上游地址配置

  • 替换宿主机IP为服务名:Docker容器间优先用服务名做DNS解析,而非宿主机IP。修改default-ssl-conf.tpl中的上游配置块:
    upstream django {
        server <你的Django服务名>:9000; # 对应docker-compose中Django服务的name字段
    }
    
  • 确认Django与Nginx服务在同一自定义网络:检查docker-compose-prod.yml,确保两者加入同一网络,示例配置:
    services:
      django:
        # ...其他配置项
        networks:
          - app-network
      nginx:
        # ...其他配置项
        networks:
          - app-network
    networks:
      app-network:
        driver: bridge
    
  • 测试Nginx容器能否解析Django服务名:
    docker exec <你的Nginx容器名称> ping <你的Django服务名>
    
    能正常ping通则网络连通性无问题。

3. 检查uWSGI配置细节

  • 确认uWSGI配置文件(如uwsgi.ini)中socket参数设置为:
    socket = 0.0.0.0:9000
    
    若设置为127.0.0.1:9000,Nginx容器无法跨网络访问;若使用Unix Socket,需确保Nginx容器挂载了相同的卷,且Socket文件权限正确(如chmod 666 /path/to/socket.sock)。

4. 排除防火墙干扰

  • 若你坚持用宿主机IP访问uWSGI,需确认DigitalOcean防火墙及宿主机UFW是否放行9000端口:
    sudo ufw allow 9000/tcp
    
    但更推荐用容器间网络访问,无需暴露9000端口到公网。

5. 重启服务验证

修改配置后,重启所有服务:

docker-compose -f docker-compose-prod.yml down && docker-compose -f docker-compose-prod.yml up -d

再次查看Nginx容器日志,确认是否还有连接拒绝错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:20:59