马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、它解决什么问题
Nginx-Proxy-Manager(简称 NPM)是一个基于 Web 的 Nginx 服务器管理工具,允许用户通过浏览器界面轻松管理和监控 Nginx。
裸 Nginx 的痛点很具体:每加一个站点就要手写一份 server{} 配置、要自己搞 Let's Encrypt 证书续期、要看一遍又一遍的 nginx -t。NPM 把这些都搬进了点鼠操作:
- 可以得到受信任的 SSL 证书;
- 通过单独的设置、自定义和入侵保护来管理多个代理;
- 查看服务器状态、设置、日志
以及流量等信息;
- 对服务器进行一键重启、停止等操作。
二、五项核心特征
| 特征 | 说明 |
| 可视化界面 | 提供直观的 Web 界面,通过浏览器轻松查看和管理 Nginx |
实时监控 | 实时监控 服务器状态和性能,包括 CPU 使用率、内存使用、网络流量等 |
| 配置文件管理 | 可以在 NPM 中编辑 Nginx 配置文件,支持语法高亮和自动补全 |
| 一键重启/停止 | 在界面里一键重启或停止 Nginx,不必手动敲命令行 |
日志 管理 | 查看和分析 Nginx 的访问日志 、错误日志等,帮助诊断问题 |
三、安装:两种路线
3.1 系统要求
Ubuntu / Debian: 16.04+
CentOS / RHEL: 7.0+
运行时依赖: Python3.6+、Django2.0+、Nginx 1.10+、PostgreSQL 9.6+
3.2 路线 A:bash 直装(源码部署)
适合不能用 Docker 的受限环境。
① 装依赖:
sudo apt-get update
sudo apt-get install -y python3 python3-pip postgresql libpq-dev g++ make \
build-essential libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev wget curl unzip
② 克隆项目:
git clone https://github.com/francescoferrari/nginx_proxy_manager.git
cd nginx_proxy_manager
③ 初始化数据库:
python manage.py dbinit
python manage.py dbmigrate
python manage.py dbupgrade
④ 创建超级用户:
python manage.py createsuperuser --username=admin [email protected] --password=mysecretpassword
⑤ 收集静态文件并启动 Django:
python manage.py collectstatic --noinput --settings=settings_local
python manage.py runserver 0.0.0.0:81 &> /dev/null &
runserver 0.0.0.0:81 把管理界面开在 81 端口、后台常驻,便于从浏览器访问管理界面。
⑥ 设置 Nginx:编辑 /etc/nginx/sites-available/default,把
proxy_set_header X-Forwarded-Host $host;
这一行注释掉(它会和 NPM 自己的转发头冲突,导致管理界面里的域名显示异常),然后重启 Nginx:
sudo service nginx restart
# 或者 systemctl restart nginx
3.3 路线 B:Docker Compose(推荐)
生产与快速验证都建议用 Docker,前提是已经装好 docker 和 docker-compose,并且 80、443、81 端口没被占用(装之前先 ss -lntp 确认)。
mkdir nginx-proxy-manager
cd nginx-proxy-manager
nano docker-compose.yaml
写入以下内容:
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# 这些端口是格式说明:
- '80:80' # 公共 HTTP 端口
- '443:443' # 公共 HTTPS 端口
- '81:81' # 管理 Web 端口
# 想暴露其他流端口照此添加,例如:
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# 主机没开 IPv6 时取消注释下面这行
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: 'jc21/mariadb-aria:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
启动:
docker-compose up -d
两个要点:depends_on: - db 声明了启动顺序;数据目录 ./data 与 ./letsencrypt 都做了挂载,一定要挂出来,否则容器一重建证书和站点配置全丢。
3.4 默认账号
Email: [email protected]
Password: changeme
第一件事就是改密码。changeme 是公开默认值,被人扫到直接就进后台了。
四、基本使用
4.1 访问管理界面
浏览器打开 http://<你的服务器IP>:81,用刚创建的超级用户或默认账号登录。
4.2 添加代理主机
在面板里点击"Proxy Hosts → Add Proxy Host",填:
- Domain Names:要转发的域名;
- Scheme:
http / https;
- Forward Hostname / IP:后端真实服务地址(一般是内网
127.0.0.1 或内网容器 IP);
- Forward Port:后端端口(如 8080);
- Custom location:需要按路径前缀分流时才填。
保存后 NPM 会自动生成对应的 Nginx server{} 配置并热加载。
4.3 单独申请证书
在代理主机编辑页里切到 SSL 标签,勾选 Request a new SSL Certificate,选择邮件、是否强制 HTTPS。NPM 会走 ACME 自动签发与续期。
坑点:这样一张一张申请比较麻烦,每个域名都要单独走一遍。解决办法是下一节。
4.4 申请通配符证书(泛域名证书)
要一次覆盖所有子域名,就申请通配符证书(泛域名证书,形如 *.example.com),后续所有子域都能复用同一张证书,不用再逐个申请。
泛域名证书必须走 DNS-01 校验(HTTP-01 校验对泛域名无效),所以要在 SSL 设置里填对应的 DNS 验证方式(如 Cloudflare 的 API Token、 DNSPod 的密钥等)。不同 DNS providers 配置方式不同,这一步是自定义域名套 NPM 时最常见的卡点。
4.5 自定义默认页面
NPM 支持自定义服务器的默认 Web 页面:点击"设置" → "默认站点"并选择"编辑",可以选择 404 Page(默认 404 页)、重定向(Redirect)或自定义页面(Custom)。
上线初期把默认站点指向一个维护页,比直接暴露 Nginx 的欢迎页专业得多。
五、生产落地的四条建议
- 81 端口别裸奔:管理界面是 root 级入口,至少配一层
allow/deny、fail2ban 或内网 VPN,别让 81 端口对公网全开。
- 80/443 与 nginx 的冲突:如果宿主机上还跑了别的 Nginx(代理 80/443),端口会打架。要么让 NPM 独占,要么把它映射到其他端口并改
forward_port。
- 证书与数据都要挂卷:
./letsencrypt 里是签好的证书,./data 里是配置,升级镜像前先备份这两个目录。
- 日志看不懂先分清两个:访问日志(access log)是"谁在请求、什么结果",错误日志(error log)是"上游挂没挂、502 谁来的"。502 优先查 error log 里的 upstream。
六、常见故障对照
| 现象 | 大概率原因 |
| 打不开 81 管理页 | 容器没起(docker-compose ps)、81 端口被占、防火墙挡 |
| 代理站点 502 | 后端服务没起、Forward IP/Port 写错、容器网络不通 |
| 证书申请失败 | 80 端口不通(HTTP-01)、DNS 校验配置错、域名解析没生效 |
| 改配置后 404 | 域名没解析到这台机器,或 Host 头不对 |
| Nginx 反复重启 | 自定义配置语法错误,NPM 会回滚导致启不来 |
小结
- NPM = 带 Web 面板的 Nginx 反代:可视化管理、实时监控、配置语法高亮、一键重启、日志查看。
- 两种装法:bash 源码部署(装依赖 → clone → 初始化数据库 → 建超管 → collectstatic → 注释 X-Forwarded-Host 后重启 nginx);Docker Compose 更省事(
jc21/nginx-proxy-manager + MariaDB,80/443/81 三端口,./data 与 ./letsencrypt 必须挂卷)。
- 默认账号 [email protected] / changeme,上线第一件事改密码。
- 代理主机填域名 + 后端 IP:端口;单张证书麻烦就上泛域名证书(必须 DNS-01)。
- 默认站点可在"设置 → 默认站点"里改成 404 / 重定向 / 自定义页面。
(本文由 qidao123.com企服评测-应用市场 编辑提示整理:示例基于 Nginx-Proxy-Manager 与 Docker Compose 常见部署方式,适用于中小型站点的反代与 HTTPS 管理场景。) |