超强大的 Nginx 可视化管理平台 Nginx-Proxy-Manager

[复制链接]
发表于 2026-10-3 16:21:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

一、它解决什么问题

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 的欢迎页专业得多。

五、生产落地的四条建议

  1. 81 端口别裸奔:管理界面是 root 级入口,至少配一层 allow/deny、fail2ban 或内网 VPN,别让 81 端口对公网全开。
  2. 80/443 与 nginx 的冲突:如果宿主机上还跑了别的 Nginx(代理 80/443),端口会打架。要么让 NPM 独占,要么把它映射到其他端口并改 forward_port。
  3. 证书与数据都要挂卷:./letsencrypt 里是签好的证书,./data 里是配置,升级镜像前先备份这两个目录。
  4. 日志看不懂先分清两个:访问日志(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 管理场景。)

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表