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 从"玄学问题"拆成具体配置问题。

相关推荐
青 春 记 忆7 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
MC皮蛋侠客7 小时前
DNP3 系列(十二):测试与工具链——模拟器、Wireshark 与一致性测试
网络·wireshark·dnp3
Java王小怪8 小时前
Docker环境Redis没挂载保存数据
运维·docker·容器
你住过的屋檐9 小时前
【Nginx】linux上安装nginx
linux·运维·nginx
观测云9 小时前
Fastjson 高危 RCE(CVE-2026-16723):如何用观测云快速发现并完成修复
网络·安全·可观测性·观测云
灰阳阳10 小时前
Docker-数据卷命令解析
java·docker·eureka
liangshanbo121511 小时前
Nginx 进程管理命令深度面试题解析
java·nginx·面试
楷哥爱开发11 小时前
TikTok Shop新加坡本土店入驻:如何选择新加坡本土住宅IP?
网络·网络协议·tcp/ip
网安蟹佬霸11 小时前
# 网络流量分析实战:从Wireshark到入侵检测系统构建(2026最新版,附完整流量分析链与IDS规则集)
网络·测试工具·安全·开源·wireshark·密码学·哈希算法
zhangfeng113312 小时前
AMD Instinct MI50(gfx906)上为 Qwen 系列模型优化并可用的 vLLM 相关仓库、Docker 镜像与实践指南。
人工智能·docker·ai编程·qwen·算子开发·vllm·mi50