引言
Nginx Proxy Manager(NPM)是一款开源的图形化工具,用于简化 Nginx 的反向代理、SSL 证书管理和负载均衡配置。相较于手动编辑 Nginx 配置文件,NPM 提供直观的 Web 界面,特别适合初学者和需要快速配置的用户。本文详细介绍如何在 Windows 系统上安装和配置 Nginx Proxy Manager,特别针对已安装 Nginx 和 NginxWebUI 的用户,帮助他们通过 Docker 部署 NPM,并与现有 Nginx 实例协调工作。文章基于用户的具体环境(Windows 10 版本 10.0.20348.2966,Nginx 解压安装在 D:\program\nginx
,NginxWebUI 运行在 D:\home\nginxWebUI
)提供指导。
背景
用户已在 Windows 系统上通过解压方式安装了 Nginx(位于 D:\program\nginx
),并使用 NginxWebUI(基于 JDK 24.0.1)管理配置,但希望探索 Nginx Proxy Manager 作为更简单的替代方案。用户提到 NginxWebUI 的初始化配置(如执行命令 D:\program\nginx\nginx.exe -c D:\home\nginxWebUI\nginx.conf -p D:\program\nginx
)和一些不适用于 Windows 的命令(如 systemctl start nginx
)。Nginx Proxy Manager 通过 Docker 运行,无需 Java 环境,适合简化反向代理和 SSL 配置,但需注意与现有 Nginx 的端口冲突。
本文整合了在 Windows 上安装 Nginx Proxy Manager 的步骤,解决端口冲突、防火墙配置等问题,并提供与现有 Nginx 和 NginxWebUI 共存的方案。
前提条件
在开始之前,请确保满足以下条件:
- 操作系统:Windows 10/11(版本 10.0.20348.2966 或更高),支持 Docker Desktop。
- Docker Desktop:已安装并运行,包含 Docker Compose。
- 权限:以管理员身份运行命令提示符或 PowerShell。
- 端口可用:80(HTTP)、443(HTTPS)、81(NPM Web 界面)端口未被占用。
- 网络:系统可访问 Docker Hub 和 Let’s Encrypt(用于 SSL 证书)。
- 现有 Nginx:解压安装在
D:\program\nginx
,可能占用 80 端口,需检查冲突。 - 防火墙:允许 Docker Desktop 和端口 80、443、81 通过 Windows Defender 防火墙。
安装和配置步骤
步骤 1:安装 Docker Desktop
- 下载 Docker Desktop:
- 访问 Docker 官网,下载适用于 Windows 的最新版本(建议 4.35.2 或更高)。
- 安装 Docker Desktop:
- 运行安装程序,勾选“Use WSL 2 instead of Hyper-V”(推荐,性能更佳,适用于 Windows 10/11 家庭版或专业版)。
- 安装完成后,重启计算机以启用 WSL 2 或 Hyper-V。
- 验证安装:
- 以管理员身份打开命令提示符(
Win + R
,输入cmd
)或 PowerShell,运行:docker --version docker-compose --version
- 预期输出示例:
Docker version 27.0.3, build 7d4bcd8 docker-compose version 2.29.1
- 确认 Docker Desktop 在系统托盘运行(检查任务栏右下角 Docker 图标)。
- 以管理员身份打开命令提示符(
步骤 2:检查端口冲突
- 检查现有 Nginx:
- 用户的现有 Nginx(
D:\program\nginx
)可能占用 80 端口,需停止:D:\program\nginx\nginx.exe -s stop -p D:\program\nginx
- 用户的现有 Nginx(
- 验证端口可用性:
- 检查 80、443 和 81 端口:
netstat -aon | findstr :80 netstat -aon | findstr :443 netstat -aon | findstr :81
- 如果端口被占用,终止相关进程:
taskkill /PID <进程ID> /F
- 或者在后续步骤中修改 NPM 的端口映射。
- 检查 80、443 和 81 端口:
- 防火墙配置:
- 确保 Windows Defender 防火墙允许 Docker Desktop 和相关端口:
- 打开“控制面板” > “Windows Defender 防火墙” > “允许的应用”。
- 添加
Docker Desktop.exe
(通常位于C:\Program Files\Docker\Docker Desktop.exe
)。 - 允许端口 80、443 和 81 的入站连接。
- 确保 Windows Defender 防火墙允许 Docker Desktop 和相关端口:
步骤 3:创建 Docker Compose 文件
- 创建目录:
- 在
D:\
下创建文件夹用于存储 NPM 数据:mkdir D:\nginx-proxy-manager cd D:\nginx-proxy-manager
- 在
- 创建
docker-compose.yml
:- 使用文本编辑器(如 Notepad++ 或 VS Code)创建
docker-compose.yml
,粘贴以下内容:version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # 公共 HTTP 端口 - '443:443' # 公共 HTTPS 端口 - '81:81' # 管理界面端口 volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
- 说明:
image
:使用官方 Nginx Proxy Manager 镜像。ports
:映射容器端口到主机(80、443 用于服务,81 用于 Web 界面)。volumes
:持久化存储配置数据和 Let’s Encrypt 证书。restart: unless-stopped
:容器自动重启,除非手动停止。
- 端口冲突处理:如果 80 或 443 端口被占用,可改为:
ports: - '8080:80' - '8443:443' - '81:81'
- 使用文本编辑器(如 Notepad++ 或 VS Code)创建
- 验证 YAML 格式:
- 可使用在线工具(如 YAMLlint)检查
docker-compose.yml
语法。
- 可使用在线工具(如 YAMLlint)检查
步骤 4:启动 Nginx Proxy Manager
- 运行 Docker Compose:
- 在
D:\nginx-proxy-manager
目录下,运行:docker-compose up -d
- Docker 将下载
jc21/nginx-proxy-manager
镜像并启动容器。
- 在
- 验证容器状态:
- 检查容器是否运行:
docker ps
- 预期输出显示
jc21/nginx-proxy-manager
容器,状态为Up
。
- 检查容器是否运行:
- 访问 Web 界面:
- 打开浏览器,访问
http://localhost:81
(或http://localhost:8081
如果修改了端口)。 - 默认登录凭证:
- 用户名:
该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。 - 密码:
changeme
- 用户名:
- 首次登录后,系统会提示更改用户名和密码,设置强密码并保存。
- 打开浏览器,访问
步骤 5:配置反向代理
- 添加代理主机:
- 登录 NPM 后,进入“Hosts” > “Proxy Hosts” > “Add Proxy Host”。
- 示例配置:
- Domain Names:
example.com
或subdomain.example.com
(需拥有域名并设置 DNS)。 - Scheme:
http
或https
。 - Forward Hostname/IP:
127.0.0.1
(本地服务)或目标服务 IP。 - Forward Port:服务端口(如 8080)。
- SSL:启用 Let’s Encrypt(需公网域名,80/443 端口开放)。
- Domain Names:
- 保存后,NPM 自动生成 Nginx 配置并重启服务。
- 测试访问:
- 使用配置的域名或
http://localhost
测试代理是否生效。 - 如果使用公网域名,确保:
- DNS 记录指向你的公网 IP。
- 路由器端口转发 80 和 443 到你的 Windows 机器。
- 使用配置的域名或
步骤 6:与现有 Nginx 和 NginxWebUI 共存
用户的现有 Nginx(D:\program\nginx
)和 NginxWebUI(D:\home\nginxWebUI
)可能占用端口或需要协调:
- 停止现有 Nginx:
- 如果 NPM 需要 80/443 端口,停止现有 Nginx:
D:\program\nginx\nginx.exe -s stop -p D:\program\nginx
- 如果 NPM 需要 80/443 端口,停止现有 Nginx:
- 调整 NPM 端口:
- 如果保留现有 Nginx,修改
docker-compose.yml
:ports: - '8080:80' - '8443:443' - '81:81'
- 重启容器:
docker-compose down docker-compose up -d
- 访问
http://localhost:8080
测试 NPM 代理。
- 如果保留现有 Nginx,修改
- 迁移现有配置:
- 将
D:\home\nginxWebUI\nginx.conf
或D:\program\nginx\conf\nginx.conf
中的反向代理配置导入 NPM,通过 Web 界面添加代理主机。
- 将
- NginxWebUI 端口:
- 如果 NginxWebUI 占用 8080 端口,编辑
D:\home\nginxWebUI\application.properties
:server.port=8081
- 重启 NginxWebUI:
cd D:\home\nginxWebUI java -jar nginxWebUI.jar
- 如果 NginxWebUI 占用 8080 端口,编辑
常见问题及解决方法
- 端口冲突:
- 检查端口占用:
netstat -aon | findstr :80 netstat -aon | findstr :443 netstat -aon | findstr :81
- 终止进程或修改
docker-compose.yml
端口。
- 检查端口占用:
- Docker 启动失败:
- 确保 Docker Desktop 运行。
- 查看容器日志:
docker logs <容器ID>
- 检查
D:\nginx-proxy-manager\data
和letsencrypt
目录权限。
- 无法访问 Web 界面:
- 确认访问
http://localhost:81
。 - 检查防火墙,允许 81 端口。
- 确认访问
- SSL 证书申请失败:
- 确保域名指向公网 IP,路由器转发 80/443 端口。
- 测试 Let’s Encrypt 连通性:
ping acme-v02.api.letsencrypt.org
- 与 NginxWebUI 冲突:
- NginxWebUI 可能占用 8080 端口,调整其端口(如上)。
- 或者停止 NginxWebUI,专注于 NPM。
替代方案:继续使用 NginxWebUI
如果用户更倾向于继续使用 NginxWebUI(已配置 D:\program\nginx\nginx.exe -c D:\home\nginxWebUI\nginx.conf -p D:\program\nginx
):
- 优点:无需安装 Docker,适合已有配置,功能更全面(如集群管理)。
- 步骤:
- 登录
http://localhost:8080
,在“配置管理”中导入或编辑D:\home\nginxWebUI\nginx.conf
。 - 配置反向代理或 SSL(如 Let’s Encrypt)。
- 检查日志:
D:\home\nginxWebUI\logs\nginxWebUI.log
和D:\program\nginx\logs\error.log
。
- 登录
- 缺点:依赖 Java,可能遇到 JDK 24 兼容性问题(可切换到 JDK 11)。
结论
在 Windows 上安装 Nginx Proxy Manager 是一个简单高效的过程,通过 Docker Desktop 部署,无需 Java 环境即可实现反向代理和 SSL 配置。关键步骤包括安装 Docker、创建 docker-compose.yml
、启动容器、配置代理主机,并处理与现有 Nginx 或 NginxWebUI 的端口冲突。相较于 NginxWebUI,NPM 更适合初学者和简单场景,但用户可根据需求选择继续使用 NginxWebUI 或迁移到 NPM。
如需进一步配置(如特定反向代理、SSL 设置)或遇到问题(如错误日志、端口冲突),请提供详细信息以获得针对性指导。参考资料包括 Nginx Proxy Manager 官方文档 和 Docker Hub 的 jc21/nginx-proxy-manager
镜像说明。