什么是 Nginx Proxy Manager?
Nginx Proxy Manager(简称 NPM)是一个基于 Nginx 的图形化反向代理管理工具,用 Docker 一键部署,让你通过 Web 界面管理代理主机和 SSL 证书,不用再手写复杂的 Nginx 配置。
为什么用它?
- 🖥️ 图形化界面:点几下就配好反代
- 🔐 自动 HTTPS:自动申请和续期 Let’s Encrypt 证书
- 🐳 Docker 部署:一条命令启动
- 📊 访问统计:内置流量和错误日志
- 👥 多用户:支持多用户权限管理
- 🔧 高级配置:支持自定义 Nginx 配置、Access List
Docker 部署
docker-compose 部署
创建 docker-compose.yml:
| |
启动:
| |
默认登录
- 地址: http://你的IP:81
- 默认账号: admin@example.com / changeme
- 首次登录后必须修改密码
⚠️ 注意:80 和 443 端口不能被占用(比如系统 Nginx、Apache 等),需要先停掉。
添加代理主机
前置准备
- 域名 A 记录解析到服务器 IP
- 后端服务已启动(可以是 Docker 容器,也可以是本地端口)
添加步骤
- 进入管理面板 → Proxy Hosts → Add Proxy Host
- 填写信息:
| 配置项 | 说明 | 示例 |
|---|---|---|
| Domain Names | 你的域名 | blog.yourdomain.com |
| Scheme | 后端协议 | http |
| Forward Hostname / IP | 后端地址 | 172.17.0.1 或容器名 |
| Forward Port | 后端端口 | 8080 |
SSL 标签页:
- SSL Certificate 选择 “Request a new SSL Certificate”
- 勾选 “Force SSL”
- 填写邮箱
点击 Save,等几秒证书就申请好了
常用配置
1. 自定义 Nginx 配置
在代理主机的 Advanced 标签页可以添加自定义 Nginx 配置:
| |
2. Basic Auth 密码保护
- Access Lists → 添加一个列表
- 添加用户名密码
- 代理主机设置里选择这个 Access List
3. WebSocket 支持
在代理主机设置中勾选 WebSockets Support,或者手动配置:
| |
多容器在同一个 Docker 网络
如果后端服务也是 Docker 容器,推荐放到同一个网络里,用容器名通信:
| |
然后 Forward Hostname 直接填容器名即可,不需要 IP。
证书管理
Let’s Encrypt 证书
NPM 会自动申请和续期证书,一般不用管。但有几个注意事项:
- 域名必须正确解析到服务器
- 80 端口必须开放(HTTP-01 验证需要)
- 证书有效期 90 天,自动续期
自定义证书
如果有自己的证书(比如通配符证书):
- SSL Certificates → Add SSL Certificate → Custom
- 上传证书和私钥
- 代理主机设置中选择这个证书
通配符证书
通配符证书需要 DNS-01 验证,支持 Cloudflare 等 DNS 服务商:
- SSL Certificates → Add SSL Certificate → Let’s Encrypt
- 勾选 Use a DNS Challenge
- 选择 DNS 服务商,填入 API Token
- 域名填
*.yourdomain.com
高级技巧
1. 默认站点
可以设置默认站点,访问未配置的域名时显示指定页面:
Settings → Default Site → 指定行为
2. 流模式(TCP/UDP)
对于非 HTTP 服务(比如 SSH、MySQL),可以用 Streams 功能:
Hosts → Streams → Add Stream
3. 404 页面美化
自定义 404 页面:在 Advanced 配置中添加:
| |
常见问题
Q: 502 Bad Gateway?
原因:后端服务没启动、地址不对、网络不通。
排查:
| |
Q: 证书申请失败?
- 检查域名解析是否正确
- 确认 80 端口对外开放
- 看日志:
/data/logs/目录下
Q: 怎么备份 NPM 配置?
备份 data/ 和 letsencrypt/ 目录就行:
| |
总结
NPM 是小服务器运维神器,特别是一台机器跑多个服务的时候,再也不用手写 Nginx 配置了。HTTPS 自动续期也省了很多事。
推荐每个有多个服务的 VPS 都装一个,管理效率提升不是一点半点 🚀
