返回列表 发布新帖

[玩法教程] Nginx Proxy Manager - 一个 Web 界面搞定所有反向代理

3302 4
发表于 2025-10-27 21:07:34 | 查看全部 阅读模式 IP:–浙江–杭州

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

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

×



1. 什么是 Nginx Proxy Manager?
Nginx Proxy Manager(简称 NPM)是一款基于 Nginx 的开源反向代理管理工具,它提供了一个简洁、直观的 Web 用户界面,让你无需手动编写复杂的 Nginx 配置文件,即可轻松地为你的多个 Web 服务配置反向代理、SSL 证书(支持 Let's Encrypt 免费证书自动签发)、访问控制等高级功能。
主要特性:
  • 图形化界面:告别命令行和 nginx.conf,通过浏览器轻松管理。
  • 一键 SSL:集成 Let's Encrypt,几分钟内为你的域名启用 HTTPS。
  • 反向代理:将不同域名或子域名指向本地不同端口的服务(如 WordPress、Nextcloud、Home Assistant 等)。
  • 访问控制:设置密码保护、IP 白名单等安全策略。
  • 多用户支持:可创建管理员和普通用户账户。
  • Docker 友好:官方提供 Docker 镜像,部署简单。

💡 适用场景:家庭服务器、开发测试环境、小型企业应用网关。
2. 部署 Nginx Proxy Manager
我们将使用 Docker 或 Docker Compose 来快速部署 Nginx Proxy Manager。这种方式便于管理容器、持久化数据,并能轻松升级。
2.1 准备工作
创建目录
# 创建安装目录
mkdir nginx-proxy-manager && cd nginx-proxy-manager
# 创建挂载目录
mkdir -p data letsencrypt

请确保在运行命令的当前目录下创建所需目录,否则会出现挂载失败错误。
2.2 Docker部署
docker run -d \
  --name nginx-proxy-manager \
  --restart unless-stopped \
  -p 80:80 \
  -p 81:81 \
  -p 443:443 \
  -v ./data:/data \
  -v ./letsencrypt:/etc/letsencrypt \
  docker.io/jc21/nginx-proxy-manager:latest
2.3 Docker Compose 部署
2.3.1 docker-compose.yml (带数据库)
services:
  # 主应用服务:Nginx Proxy Manager
  app:
    # 使用官方 Nginx Proxy Manager 镜像
    image: 'jc21/nginx-proxy-manager:latest'
    # 自定义容器名称
    container_name: nginx-proxy-manager
    # 重启策略:除非手动停止,否则自动重启(适合生产环境)
    restart: unless-stopped
    # 端口映射
    ports:
      - '80:80'    # HTTP 流量入口
      - '443:443'  # HTTPS 流量入口
      - '81:81'    # Web 管理界面访问端口(通过 http://your-ip:81 访问)
    # 数据卷挂载,实现数据持久化
    volumes:
      - ./data:/data                    # 持久化 NPM 配置和数据库
      - ./letsencrypt:/etc/letsencrypt  # 持久化 Let's Encrypt SSL 证书
    # 环境变量:配置数据库连接信息
    environment:
      DB_HOST: mysql                   # 数据库主机名(对应下方 mysql 服务名)
      DB_USER: npm                     # 数据库用户名
      DB_PASS: your_secure_password_here  # 数据库用户密码(请替换为强密码!)
      DB_NAME: npm_db                  # 使用的数据库名称
      DB_PORT: 3306                    # MySQL 默认端口
    # 依赖关系:确保 mysql 服务启动完成后再启动 NPM
    depends_on:
      - mysql
  # 数据库服务:MySQL 8.0(稳定版本,广泛支持)
  mysql:
    # 使用 MySQL 8.0 官方镜像
    # 8.0 版本性能更好,安全性更高,且长期支持
    image: 'mysql:8.0'
    # 自定义容器名称
    container_name: npm-mysql
    # 自动重启策略
    restart: unless-stopped
    # 环境变量:MySQL 初始化配置
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password_here  # root 用户密码(请务必修改!)
      MYSQL_DATABASE: npm_db                        # 初始化时创建的数据库(需与 NPM 配置一致)
      MYSQL_USER: npm                               # 创建的普通用户
      MYSQL_PASSWORD: your_secure_password_here     # 该用户的密码(必须与 DB_PASS 一致)
    # 数据持久化:将 MySQL 数据目录挂载到本地
    volumes:
      - ./mysql-data:/var/lib/mysql   # 确保数据库数据在容器重建后不丢失
    # 可选:如果需要自定义 MySQL 配置(如编码、性能调优),可挂载配置文件
    # volumes:
    #   - ./mysql-data:/var/lib/mysql
    #   - ./mysql-config/my.cnf:/etc/mysql/my.cnf
2.3.2 docker-compose.yaml(不带数据库)
services:
  # 定义一个名为 'app' 的服务,用于运行 Nginx Proxy Manager
  app:
    # 镜像地址:从 Docker Hub 拉取官方镜像
    # 使用完整域名 docker.io 表示来自官方镜像仓库(等同于不写也可,但更明确)
    # 'jc21/nginx-proxy-manager' 是 Nginx Proxy Manager 的官方镜像
    # ':latest' 标签表示使用最新稳定版本(建议生产环境指定具体版本号以确保稳定性)
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    # 容器重启策略
    # unless-stopped:除非手动停止容器,否则在 Docker 启动时自动运行
    # 适合长期运行的服务,保证异常退出后能自动恢复
    restart: unless-stopped
    # 端口映射(Host:Container)——将宿主机端口映射到容器内部端口
    ports:
      - '80:80'    # 将宿主机的 80 端口映射到容器的 80 端口
                   # 用途:接收并处理 HTTP 请求(如 http://your-domain.com
      - '81:81'    # 将宿主机的 81 端口映射到容器的 81 端口
                   # 用途:访问 Nginx Proxy Manager 的 Web 管理界面(http://your-ip:81)
      - '443:443'  # 将宿主机的 443 端口映射到容器的 443 端口
                   # 用途:接收并处理 HTTPS 请求(如 https://your-domain.com
    # 数据卷挂载(Volume Mounts)——实现数据持久化,防止容器删除后配置丢失
    volumes:
      - ./data:/data                    # 将当前目录下的 ./data 映射到容器内的 /data
                                       # 用途:存储 NPM 的数据库、配置文件、会话等核心数据
      - ./letsencrypt:/etc/letsencrypt  # 将当前目录下的 ./letsencrypt 映射到容器内的 /etc/letsencrypt
                                       # 用途:持久化 Let's Encrypt 签发的 SSL 证书
                                       #      避免因容器重建导致证书失效或频繁重签

2.4 启动服务
docker-compose up -d
首次启动可能需要几分钟下载镜像并初始化数据库。
3. 登录&截图

打开浏览器,访问:http://你的服务器IP:81
默认登录的用户名:[email protected] 密码:changeme
第一次登录会提示更改用户名和密码,建议修改一个复杂一点的密码。
至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 其他 Web 应用做反向代理了。
4. 配置反向代理

登录系统后,我们就可以来给 Halo 来添加一个反向代理了。
点击 Proxy Hosts,

                               
登录/注册后可看大图
接着点击 Add Proxy Host,弹出如下对话框:

                               
登录/注册后可看大图
看起来都是英文,很复杂,但是其实很简单,我们只要用到其中的几个功能即可,这边稍微解释一下:
  • Domain Names :填我们 Halo 网站的域名,首先记得做好 DNS 解析,把域名绑定到我们的服务器的 IP 上
  • Scheme :默认 http 即可,除非你有自签名证书
  • Forward Hostname/IP :填入服务器的 IP,或者 Docker 容器内部的 IP(如果 NPM 和 Halo 搭建在同一台服务器上的话)
  • Forward Port:填入 Halo 映射出的端口,这边默认是 8090
  • Cache Assets :缓存,可以选择打开
  • Block Common Exploits:阻止常见的漏洞,可以选择打开
  • Websockets Support :WS 支持,可以选择打开
  • Access List:这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究。

以下是一个样列:

                               
登录/注册后可看大图
因为样例的 NPM 和 Halo 搭建在同一台 VPS 上,所以这边的 IP,图中填的是 172.17.0.1,为 Docker 容器内部的 IP 地址,
可以通过下面的命令查询:
ip addr show docker0

4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default     link/ether 02:42:e4:a3:b5:b9 brd ff:ff:ff:ff:ff:ff    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       valid_lft forever preferred_lft forever

这边的 IP 是 172.17.0.1,填入这个 IP,可以不用打开防火墙的 8090 端口。
当然,如果你的 NPM 和 Halo 不在同一台服务上,你需要在 IP 部分填入 你的 Halo 所在的服务器的 IP,并在服务商(部分服务商如腾讯、阿里)的后台打开 8090 端口。
5. 一键申请 SSL 证书

接着我们来申请一张 SSL 证书,让我们的网站支持 https 访问。

                               
登录/注册后可看大图

                               
登录/注册后可看大图
如图所示,记得打开强制 SSL,其他四个的功能请自行研究,这边不多做讨论。
信息
  • 申请证书需要你提前将域名解析到 NPM 所在的服务器的 IP 上;
  • 如果你使用的是国内的服务器,默认 80 和 443 端口是关闭的,你需要备案之后才能使用;
  • 如果你使用了 CloudFlare 的 DNS 服务,记得把小黄云关闭(即不开启 CDN)。

不出意外,你将成功申请到 SSL 证书,证书会三个月自动续期。
再次点开配置,查看一下,将强制 SSL 打开。

                               
登录/注册后可看大图
至此,你已经成功完成了 Halo 的反向代理,快尝试使用域名访问一下看看吧!
6. 相关链接


评论4

蓝小白Lv.4 发表于 2025-10-28 10:57:52 | 查看全部 IP:–贵州–遵义
太复杂了  还是lucky好点
没有车的老司机Lv.4绿联NAS社区会员用户 发表于 2025-10-29 10:32:17 | 查看全部 IP:–浙江–绍兴
对的,看着这么长,头都是晕的
橘霓暴Lv.1 发表于 2025-10-29 16:53:44 | 查看全部 IP:–广西–南宁
习惯用lucky了,能用就别换,换了容易出问题
JjGWNeLv.1 发表于 2025-11-15 00:17:10 | 查看全部 IP:–贵州–遵义
谢谢你的分享!!教程写的很详细

评论

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2026 绿联NAS私有云社区 版权所有 All Rights Reserved. 粤公网安备44030002002555号| 粤ICP备12028978号
关灯 在本版发帖
联系技术支持
返回顶部
快速回复 返回顶部 返回列表