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

相关推荐
llilian_1625 分钟前
北斗授时卡同步解决方案 gnss授时卡 计算机时间同步板卡
大数据·网络·人工智能·功能测试·51单片机
Vicky_time27 分钟前
跨境物流系统架构:美国海外仓与FBA中转海外仓选型技术方案评测
网络·人工智能
师傅别念了1 小时前
Nginx 反向代理配置指南,看完这篇就够了
nginx
多多鼠2 小时前
System Prompt 的“版本漂移”问题:从变更管理到 A/B 测试体系
开发语言·网络·人工智能·python·langchain
Allen_LVyingbo3 小时前
三甲医院医疗AI代码库管理系统研究(上)
网络·transformer·知识图谱·健康医疗
迪康coolmu4 小时前
企业文件外发管控落地实践 —— 基于迪康端点安全一体化管理系统
运维·网络·经验分享·安全
小此方4 小时前
Linux网络(十二):HTTP短连接与长连接:从Connection机制到Cookie、Session,彻底理解HTTP的无状态
服务器·网络·http
永远不会出bug5 小时前
什么是内网穿透?
网络
raindayinrain5 小时前
Linux 网络编程--套接字选项
linux·网络·套接字选项
程序员老赵6 小时前
Docker 部署 XXL-JOB:轻松搭建分布式任务调度平台
后端·docker·开源