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

相关推荐
Archy_Wang_12 小时前
LVS+KeepAlived+Nginx实现企业级业务高可靠部署的实战教程
运维·nginx·lvs
张文君3 小时前
docker使用代理拉取镜像
运维·docker·容器
Ai拆代码的曹操4 小时前
Nginx upstream keepalive 连接池中毒排查实录
chrome·nginx·php
陌路204 小时前
Docker教程从入门到精通(0基础)
运维·docker·容器
初级炼丹师(爱说实话版)5 小时前
Ubuntu24.04 Docker+vLLM+qianwen2.5-coder-32B部署文档
docker·容器·vllm
2301_780789665 小时前
DDoS 攻击溯源:DNS 水印标记 + 区块链存证的双保险
运维·服务器·网络·云原生·ddos
ᥬ 小月亮10 小时前
SonarQube使用教程(Docker安装)
运维·docker·容器
2601_9494999411 小时前
芯瑞科技 DT-1414 光模块工程实测:完美兼容博通(安华高) HFBR-1414PTZ,VCSEL 替代方案
大数据·网络·人工智能·科技·光模块
在世修行11 小时前
Windows 上 Docker Desktop 部署 MySQL + TDengine 全过程(含 WSL 报错与镜像加速排障实战)
windows·mysql·docker·tdengine
云边云科技_云网融合11 小时前
连锁门店 POS、监控、IoT 设备网络不稳定怎么解决?
网络·物联网