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

Nginx无法连接Django/Gunicorn容器,访问返回502错误求助

解决DigitalOcean部署后端服务的502错误问题

一、错误日志分析

Nginx返回502错误,对应日志如下:

2023/12/01 10:05:43 [error] 31#31: *507 upstream timed out (110: Connection timed out) while connecting to upstream, client: 141.101.98.150, server: mydomaine.com, request: "GET / HTTP/1.1", upstream: "http://172.27.0.7:5001/", host: "mydomaine.com"

核心问题:Nginx无法与上游服务(dev容器)建立连接,超时导致502错误。

二、关键配置修正与排查步骤

1. 修正Nginx代理地址错误

你的Nginx配置中,proxy_pass指向了http://dev:5001,但Docker容器间通信需使用容器内部端口,而非宿主机映射端口。

查看dev容器的Docker Compose配置:

dev:
  ...
  ports:
    - 5001:6000
  ...

其中5001是宿主机对外端口,6000是容器内gunicorn服务绑定的端口。因此需修改Nginx配置:

location / {
    proxy_pass http://dev:6000;  # 改为容器内部端口6000
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

2. 检查dev容器运行状态

执行命令确认dev容器是否正常启动:

docker-compose ps dev

若容器未运行或频繁重启,查看容器日志定位问题:

docker-compose logs dev

需重点排查:

  • 数据库连接:确认db_dev容器正常运行,POSTGRES_HOST环境变量已设为db_dev
  • 启动脚本故障:start.sh中makemigrations或migrate命令是否报错,导致gunicorn未启动
  • 依赖缺失:检查Dockerfile中编译依赖(如postgresql-dev)是否正确安装

3. 验证容器间通信

进入webserver容器,直接访问dev容器的6000端口,确认服务可达:

docker-compose exec webserver curl http://dev:6000

若访问失败,说明dev容器内部的gunicorn服务未正常启动,需进一步排查容器日志和启动脚本。

4. 补充优化(可选)

若服务启动较慢,可在Nginx的location块中添加超时配置,避免过早触发超时:

proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;

三、修复流程

  1. 修改Nginx配置中的proxy_pass地址为http://dev:6000
  2. 重启Nginx容器:docker-compose restart webserver
  3. 确认dev容器正常运行,gunicorn服务已启动
  4. 重新访问服务验证是否恢复正常

内容的提问来源于stack exchange,提问作者B. Mohammad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:23:12