Nginx Proxy Manager 从安装到使用:手把手完整教学(含反向代理 + HTTPS)
在智能家居、NAS、自建服务越来越流行的今天,如何安全、稳定、便捷地把内网服务暴露到公网,成为许多人要面对的问题。
没错,你可以自己写 Nginx 配置,但对很多人来说太复杂。
于是 Nginx Proxy Manager(简称 NPM) 出现了—— 一个拥有可视化界面的 Nginx 管理工具,让你像点外卖一样设置反向代理、HTTPS 证书。
本文将从 零基础 带你完成:
- 安装 NPM
- 配置反向代理
- 配置 HTTPS(自动申请、自动续期)
- DNS 方式申请证书
- 常见问题解决
适合 NAS、自建服务器、群晖、OpenWrt、云服务器、小白和专业开发者。
前面写了关于 DDNS 和 WOL 的文章,现在我想通过 NPM 把 NAS 上的相关服务暴露到公网。
📌 一、什么是 Nginx Proxy Manager?
NPM 是一个对 Nginx 进行“可视化管理”的工具,特点:
- 图形化界面设置反向代理
- 内置 Let’s Encrypt,支持 HTTPS 证书自动申请与续期
- 支持 HTTP、HTTPS、TCP、UDP 代理
- 配置简单,适合家庭服务器/NAS
你可以把它理解为:
把复杂的 Nginx 配置文件,变成可视化的网页管理系统。
📌 二、Nginx Proxy Manager 适用场景
NPM 最常见的用途包括:
- 内网服务暴露公网
- 群晖套件(File Station、NAS 管理)
- DDNS-GO WebGUI(带网页界面)
- WEBDAV(文件分享)
- WOL 页面(唤醒局域网主机)
- Jellyfin (视频播放)
- 多域名反向代理
例如:
nas.xxx.com → 群晖后台
ddns.xxx.com → DDNS-GO WebGUI
webdav.xxx.com → WEBDAV 页面
wol.xxx.com → WOL 页面
media.xxx.com → Jellyfin (视频播放)
- 给服务加 HTTPS
自动申请证书,无需手动配置 Nginx。
📌 三、Nginx Proxy Manager 安装(Docker 版)
最推荐的方式:Docker + docker-compose
1)创建目录
$ mkdir -p /opt/npm
$ cd /opt/npm
2)创建 docker-compose.yml
version: '3'
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
3)启动
$ docker compose up -d
几秒后访问:
👉 http://服务器IP:81
出现登录页面。
📌 四、初次登录
输入邮箱和密码, 点击 SAVE,初始账户就创建了
Email: admin@example.com
Password: changeme
登录后进入主界面。
📌 五、基础使用:创建一个反向代理
下面以访问本地 DDNS-GO WebGUI 为例。
目标
让 https://ddns.xxx.com 访问到 内网 http://192.168.1.50:9876
步骤 1:添加 Proxy Host
进入:
Hosts → Proxy Hosts → Add Proxy Host
填入信息:
① Domain Names
ddns.xxx.com
② Forward Hostname / IP
192.168.1.50
③ Forward Port
9876
📌 六、配置 HTTPS(自动申请证书)
回到 Proxy Hosts 列表 点击对应域名 → Edit → SSL 标签
选择:
Request a new SSL Certificate(申请 Let's Encrypt)
勾选:
Force SSL(强制跳转 HTTPS)
HTTP/2 Support
HSTS Enabled(可选)
填邮箱
点击 Save
如果 DNS 正确解析到服务器,证书将自动申请成功。
📌 七、DNS 自动验证申请证书(推荐)
- 如果你无法开 80 端口(如家宽),必须使用 DNS 方式申请。 路径:
Certificates → Add Certificate → Let’s Encrypt via DNS
选择 DNS 服务商:Cloudflare、阿里云 、DNSPod 等
填入 API Key
优点:
- 🔥 不需要开放 80 或 443 端口
- 🔥 内网穿透也能申请
- 🔥 万能模式,最稳定
强烈推荐 DDNS + DNS Challenge 搭配使用。
📌 八、常见问题与解决方案
- 请证书失败,提示 Cannot connect to HTTP 或者 是 Invalid Error
原因:
- 80/443 被运营商屏蔽, 一般是这个原因
- 路由器未开放端口
- 公网 IP 不是真公网
解决方案:
- 改用 DNS Challenge
- 使用 frp、tailscale、zerotier 等外网映射
- 访问域名显示 502 Bad Gateway
检查:
- 服务是否运行
- 内网 IP 是否正确
- Websocket 是否勾选
- 防火墙是否允许对应端口
- 群晖端口占用 80/443 和 NPM 冲突
两种解决方案:
- 方案 A:改变群晖的 Web 端口
- 控制面板 → 网络 → DSM 设置
- 把 80 / 443 改为其他端口。
- 方案 B:NPM 使用其他端口,再在路由器做端口转发
例如将 NPM 的 80 改到 18080。
📌 九、NPM 使用建议
- 不要让 NPM 和其他服务抢 80/443
- 推荐搭配 Cloudflare 、DDNS
- 使用 DNS Challenge 更稳定
- 如果是家宽,优先确认是否有公网 IP
- 不要把 NPM 放在公网服务器代理内网服务(安全风险)
📌 十、总结
Nginx Proxy Manager 让“反向代理 + HTTPS”这件本来非常复杂的事情,变得:
- 无需写配置文件
- 点鼠标就行
- 自动申请证书
- 适合 NAS / 群晖 / 家宽等各种环境
这是目前家庭服务器、自建服务、NAS 圈子中最流行的反向代理方案之一。
我自己的路由器设置
因为我是家宽,虽然有动态的外网IP,但是无法使用80和443端口。
- 我是把999端口映射到NPM的443端口, 这样把外网的所有https流量都通过流量转发到了NPM的443端口。
- 如果你NPM所在的服务器443端口被占用,则可以改变NPM的443端口映射到其他端口。
- 比如1443端口, 然后在路由器做端口转发,把外网的999端口映射到1443端口。
- 然后通过域名前缀判断流量是要转发到哪个服务。
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/1/01/18/
- 更新时间:2026-08-18 01:13:55
- 本文声明:转载请标记原文作者及链接
