Docker环境下用Nginx代理Node.js API出现502 Bad Gateway问题求助
问题排查与修复步骤
1. 修复Nginx反向代理地址错误
Docker Compose 会为所有服务自动创建独立的内部网络,同一个网络下的容器通过服务名互相通信,而非 localhost。你当前Nginx配置里的proxy_pass http://localhost:3000 指向的是Nginx容器自身的3000端口,而非Node服务的端口,这是502错误的核心原因。
修改default.conf中对应server块的配置:
server { listen 80; server_name api.mydomain.com; location / { proxy_pass http://node:3000; # 建议补充以下代理头,避免Node服务获取请求信息异常 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
2. 修复Node服务可访问性配置
- 检查你的Node.js代码的监听配置,必须监听
0.0.0.0而非127.0.0.1,否则容器外的请求无法访问:
示例正确写法:app.listen(3000, '0.0.0.0', () => { console.log('服务启动在0.0.0.0:3000'); }); - 补充
docker-compose.yml中Nginx服务的依赖配置,确保Node服务先启动:services: nginx: build: context: . dockerfile: nginx.dockerfile ports: - 80:80 volumes: - ./src:/var/www/html depends_on: - php - node # 新增Node服务依赖 # 无需给Node服务映射宿主端口,只要Nginx能通过内部网络访问即可
3. 生效配置
修改完成后执行以下命令重启服务即可:
docker-compose down docker-compose up -d --build
补充排查
如果修改后仍有问题,执行docker-compose logs node查看Node服务日志,确认服务正常启动且没有运行报错。
内容的提问来源于stack exchange,提问作者Mário Santos
相关产品推荐
相关产品推荐

