Nginx Proxy Manager运行但未拦截流量、无法申请SSL证书故障
问题根因
所有异常的核心诱因是公网80/443端口流量未被Nginx Proxy Manager(以下简称NPM)接管,直接打到了Bitwarden服务上,各异常表现的对应逻辑完全吻合:
- 转发端口填任意随机值都能打开Bitwarden,说明你配置的NPM代理规则根本没有执行,流量完全没经过NPM的转发逻辑
- 申请SSL证书时提示域名指向的服务不是NPM,是因为Let's Encrypt的HTTP-01验证请求到80端口后,被Bitwarden直接响应,自然匹配不到NPM的验证文件
- 仪表盘代理主机计数显示0但列表可见规则,是NPM核心转发进程因端口冲突未正常加载规则导致的衍生问题
分步修复配置
1. 排查端口占用,修正端口映射
先在树莓派终端执行命令,确认80、443端口的实际占用进程:
sudo ss -tulpn | grep -E ':(80|443)\s'
正常情况下这两个端口应该由NPM进程监听,你当前的状态大概率是Bitwarden(或其内置Nginx组件)直接绑定了宿主机的80/443端口,导致NPM的端口映射失效,按以下步骤修正:
- 停掉Bitwarden服务,修改Bitwarden/Vaultwarden的配置,将其对外监听端口改为非80/443的内网端口(比如8080、8443),确保Bitwarden不再占用公网标准端口
- 检查NPM的启动配置(绝大多数树莓派部署场景为Docker/Docker Compose部署),确认端口映射规则为
80:80、443:443、81:81,不要将容器端口映射到宿主机的其他非标准端口上 - 重启NPM服务后再次执行端口检查命令,确认80、443端口已由NPM进程接管。本地执行
curl http://127.0.0.1如果返回NPM默认404页面,即可确认端口接管正常。 - 检查路由器端口转发规则,确保公网80、443端口的流量直接转发到树莓派内网IP的80、443端口,不要转发到Bitwarden的服务端口,也不要配置DMZ主机直接指向Bitwarden服务。
2. 清理失效规则,重新创建代理主机
- 进入NPM后台,删除之前创建的所有无效代理主机、失败的SSL证书申请记录
- 确认DuckDNS域名解析的公网IP和当前家庭宽带的公网IP一致
- 新建代理主机:
- Domain Names 填写
mything.duckdns.org - Forward IP 填写树莓派内网IP,Forward Port 填写之前修改后的Bitwarden内网监听端口(比如配置的8080就填8080)
- 暂时不要开启自定义Nginx配置、强制SSL等选项,先保存规则
- Domain Names 填写
3. 验证流量接管后申请SSL证书
- 先通过HTTP访问
http://mything.duckdns.org,测试时可以故意把转发端口改成一个不存在的端口,如果访问返回NPM的502错误页,说明流量已经被NPM正常接管;如果改了随机端口仍然能打开Bitwarden,回到第一步重新排查端口占用 - 确认流量接管正常后,编辑对应代理主机,切换到SSL标签页,选择「Request a new SSL Certificate」,勾选同意Let's Encrypt服务条款后提交申请即可,证书申请成功后再开启强制HTTPS选项。
4. 修复仪表盘计数异常
如果完成前三步操作后,代理转发、SSL证书都正常工作,但仪表盘仍然显示0 Proxy Hosts,直接重启NPM服务即可:
# Docker部署场景执行,容器名按实际部署的名称修改 docker restart npm
重启后等待1分钟刷新后台,计数即可恢复正常。
内容的提问来源于stack exchange,提问作者chadat23
相关产品推荐
相关产品推荐

