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 通常不是证书问题,而是反代容器访问不到上游。
排查顺序建议:
- 后端服务是否启动。
- 宿主机能否访问后端。
- 反代容器能否访问后端。
- Docker network 是否一致。
- 宿主机端口和容器端口是否混用。
- Scheme 是否填错。
- 镜像更新是否真的完成。
按这个顺序查,基本能把 502 从"玄学问题"拆成具体配置问题。