Nginx Proxy Manager 反代 502 排查:Docker 网络、容器端口和上游地址

1. 问题现象

在 NAS、Linux 小主机或轻量服务器上部署 Nginx Proxy Manager 后,后台配置了 Proxy Host,域名也解析到了服务器,但访问服务时出现 502。

典型情况:

  • 后端服务在内网能打开。
  • Nginx Proxy Manager 页面正常。
  • 证书申请也正常。
  • 访问域名时返回 502 Bad Gateway。

这类问题优先排查上游地址、Docker 网络、端口层级和容器可达性。

2. 先确认后端服务可访问

先不要看反代配置,直接访问后端服务:

bash 复制代码
curl -I http://127.0.0.1:8096
curl -I http://192.168.1.20:8096

如果后端服务本身不通,先看后端容器:

bash 复制代码
docker compose ps
docker compose logs --tail=100 jellyfin

确认服务启动后,再排 Nginx Proxy Manager。

3. 进入 Nginx Proxy Manager 容器测试上游

宿主机能访问,不代表反代容器能访问。

进入容器:

bash 复制代码
docker exec -it nginx-proxy-manager sh

测试上游:

bash 复制代码
wget -S -O- http://192.168.1.20:8096
wget -S -O- http://jellyfin:8096

如果容器内访问失败,502 就不是前端问题,而是反代容器到后端服务之间不通。

4. Docker 网络是否一致

如果希望在 Nginx Proxy Manager 里填写容器名:

text 复制代码
jellyfin

那么 Nginx Proxy Manager 和 Jellyfin 必须在同一个 Docker network。

查看网络:

bash 复制代码
docker network ls
docker network inspect proxy

推荐创建一个公共反代网络:

bash 复制代码
docker network create proxy

Nginx Proxy Manager:

yaml 复制代码
services:
  npm:
    image: docker.1ms.run/jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    networks:
      - proxy

networks:
  proxy:
    external: true

Jellyfin:

yaml 复制代码
services:
  jellyfin:
    image: docker.1ms.run/linuxserver/jellyfin:latest
    container_name: jellyfin
    ports:
      - "8096:8096"
    networks:
      - proxy

networks:
  proxy:
    external: true

这样 Nginx Proxy Manager 才能用 jellyfin:8096 访问后端。

5. 宿主机端口和容器端口不要混

如果后端服务端口映射是:

yaml 复制代码
ports:
  - "18096:8096"

那么有两个访问方式:

访问方式 地址
宿主机或局域网访问 http://NAS_IP:18096
同 Docker network 容器访问 http://jellyfin:8096

Nginx Proxy Manager 里不能随便混用。

如果填写 jellyfin,端口应该是容器端口 8096。

如果填写 NAS IP,端口应该是宿主机映射端口 18096。

6. 上游协议要匹配

很多服务内部是 HTTP,不是 HTTPS。

Nginx Proxy Manager 里常见配置:

text 复制代码
Scheme: http
Forward Hostname / IP: jellyfin
Forward Port: 8096

如果后端服务本身没有启 HTTPS,却把 Scheme 填成 https,也可能出现异常。

一般建议:公网入口用 HTTPS,反代到内网服务用 HTTP。

7. 镜像拉取失败也会伪装成 502

如果你刚升级后端服务,先确认镜像和容器状态:

bash 复制代码
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100

如果镜像拉取慢或失败,后端服务可能没有完成更新。可以先把镜像拉取链路单独验证,避免把部署失败误判成反代问题。

8. 排查命令汇总

bash 复制代码
# 后端是否运行
docker compose ps
docker compose logs --tail=100 jellyfin

# 宿主机访问
curl -I http://192.168.1.20:8096

# 反代容器访问
docker exec -it nginx-proxy-manager sh
wget -S -O- http://jellyfin:8096
wget -S -O- http://192.168.1.20:8096

# Docker 网络
docker network ls
docker network inspect proxy

9. 总结

Nginx Proxy Manager 502 通常不是证书问题,而是反代容器访问不到上游。

排查顺序建议:

  1. 后端服务是否启动。
  2. 宿主机能否访问后端。
  3. 反代容器能否访问后端。
  4. Docker network 是否一致。
  5. 宿主机端口和容器端口是否混用。
  6. Scheme 是否填错。
  7. 镜像更新是否真的完成。

按这个顺序查,基本能把 502 从"玄学问题"拆成具体配置问题。

相关推荐
贞明电子1 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
HideF2 小时前
Linux
linux·服务器·网络
万联WANFLOW2 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
sbjdhjd2 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
taktok_ai4 小时前
用 cc-switch 连接 Taktok
网络
小嘉丶学长6 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
pt10438 小时前
Cisco设备网络安全系列-18:SIEM与SOAR安全解决方案
网络·安全
Tel199253080048 小时前
温度湿度信号转WiFi/MQTT/Modbus TCP采集模块 无线传输
网络·网络协议·tcp/ip·工业自动化·工控设备
yyuuuzz9 小时前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
youce_1239 小时前
测速跑满,但是打开网页、刷视频总转圈?问题不在带宽
网络·智能路由器