容器化Nginx反向代理返回502 Bad Gateway故障求助
解决Docker容器中Nginx反向代理Ombi返回502 Bad Gateway的问题
问题根源
在Docker容器环境中,Nginx配置里的localhost指向的是Nginx容器自身的网络栈,而非宿主机。你之前的配置让Nginx尝试访问自己容器内的3579端口,但该端口没有监听服务,导致连接失败返回502。而直接通过宿主机端口访问Ombi正常,是因为宿主机的端口映射已经把请求转发到了Ombi容器。
解决方案
利用Docker Compose默认的容器间网络,通过容器服务名直接访问Ombi,无需依赖宿主机端口映射。
1. 修改Nginx配置文件(Nginx-base.conf)
将所有proxy_pass目标从http://localhost:3579改为http://ombi:3579,同时合并重复的location配置,添加必要的反向代理请求头(帮助Ombi识别真实请求来源):
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ombi.MYDOMAIN.dev; location / { proxy_pass http://ombi:3579; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 添加以下请求头,确保Ombi能正确处理反向代理请求 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; proxy_buffering off; proxy_buffer_size 16k; proxy_busy_buffers_size 24k; proxy_buffers 64 4k; } }
2. (可选)显式配置Docker网络(增强可读性)
虽然Docker Compose会自动为同一配置文件中的容器创建共享网络,但显式声明网络可以让配置更清晰:
services: ombi: image: lscr.io/linuxserver/ombi:latest container_name: ombi environment: - PUID=1004 - PGID=1004 - TZ=America/Los_Angeles # 若要使用子路径暴露,取消注释下面一行,同时调整Nginx的location配置 # - BASE_URL=/ombi volumes: - /mnt/vault/data/ombi/config:/config ports: - 3579:3579 # 保留端口映射方便直接测试 restart: unless-stopped networks: - proxy-network nginx: image: lscr.io/linuxserver/nginx:latest container_name: nginx environment: - PUID=1000 - PGID=1000 - TZ=America/Los_Angeles volumes: - /mnt/vault/data/nginx:/config - /mnt/vault/data/nginx/certbot/www:/var/www/certbot/:ro ports: - 80:80 - 443:443 restart: unless-stopped networks: - proxy-network networks: proxy-network: driver: bridge
3. 重启服务验证
执行命令重启Nginx容器,使配置生效:
docker-compose restart nginx
之后访问https://ombi.MYDOMAIN.dev即可正常访问Ombi服务。
补充:启用BASE_URL的场景
如果需要通过子路径(如https://MYDOMAIN.dev/ombi)暴露Ombi,需:
- 取消Ombi容器环境变量中的
BASE_URL=/ombi注释 - 修改Nginx的
location配置:
location /ombi/ { proxy_pass http://ombi:3579/ombi/; # 其余代理头配置同上 }
注意路径末尾的斜杠必须保持一致,避免路径拼接错误。
日志排查优化
若后续仍需排查问题,可调整Nginx的日志级别,在主配置文件中添加:
error_log /config/log/nginx/error.log info;
这样可以捕获到更详细的连接错误信息。
内容的提问来源于stack exchange,提问作者safetymonkey
相关产品推荐
相关产品推荐

