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

Oracle Cloud上Nginx Proxy Manager出现502 Bad Gateway问题求助

解决Nginx Proxy Manager反向代理502 Bad Gateway问题

问题背景

在Oracle Cloud的Ubuntu实例上通过docker-compose部署了两个容器:

  1. Nginx Proxy Manager容器,配置如下:
version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    environment:
      DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  1. 网站容器,配置如下:
version: '3'
services:
  app:
    image: 'nginx:latest'
    restart: unless-stopped
    ports:
      - '91:80'
    volumes:
      - ./data:/usr/share/nginx/html

服务器iptables规则(执行sudo iptables -L INPUT -n --line-numbers输出):

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp spt:123
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

当前现象:通过IP:91访问网站正常,但通过域名访问时出现502 Bad Gateway错误。


排查与解决步骤

1. 测试容器间网络连通性

Nginx Proxy Manager容器无法访问网站容器是502的核心原因,先验证连通性:

# 获取Nginx Proxy Manager容器ID
docker ps | grep nginx-proxy-manager
# 进入容器内部
docker exec -it <容器ID> /bin/bash
# 测试访问网站容器的主机IP:91
curl <服务器公网IP>:91
# 或测试网站容器内部IP:80(更准确,因为主机91端口映射到容器80)
# 先查网站容器内部IP
docker inspect <网站容器ID> | grep "IPAddress"
# 在Proxy Manager容器内执行curl
curl <网站容器内部IP>:80

如果curl失败,说明网络不通,继续以下步骤。

2. 统一容器网络

默认情况下两个容器处于独立的bridge网络,无法直接通过服务名访问,需加入同一自定义网络:

修改Nginx Proxy Manager的docker-compose.yml:

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    environment:
      DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - web-network

networks:
  web-network:
    name: web-network

修改网站容器的docker-compose.yml:

version: '3'
services:
  app:
    image: 'nginx:latest'
    restart: unless-stopped
    # 可移除主机端口映射,内部网络直接访问容器80端口
    # ports:
    #   - '91:80'
    volumes:
      - ./data:/usr/share/nginx/html
    networks:
      - web-network

networks:
  web-network:
    external: true
    name: web-network

重启两个容器:

# 重启Proxy Manager
docker-compose down && docker-compose up -d
# 重启网站容器
docker-compose down && docker-compose up -d

3. 更新反向代理目标

登录Nginx Proxy Manager后台(服务器IP:81),修改域名的反向代理配置:

  • 将目标地址从公网IP:91改为网站容器的服务名(如app:80)或内部IP:80。

4. 检查iptables转发规则

容器间通信依赖FORWARD链规则,执行以下命令确认:

sudo iptables -L FORWARD -n --line-numbers

确保没有拒绝容器间流量的规则,Docker默认会自动添加允许同一网络内容器通信的规则。

5. 查看Proxy Manager日志定位问题

通过日志获取具体错误信息:

docker logs <Nginx Proxy Manager容器ID>

日志会明确显示连接失败原因(如地址解析失败、连接被拒绝等),针对性修复。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:35:55