Nginx Proxy Manager 使用指南:反向代理与SSL证书配置
Nginx Proxy Manager 使用指南:反向代理与SSL证书配置
Nginx Proxy Manager (NPM) 是一个基于 Nginx 的、具有图形化界面的反向代理服务器管理工具。它极大地简化了 Nginx 的配置过程,让用户无需编写复杂的 Nginx 配置文件,即可轻松实现反向代理、SSL 证书配置、负载均衡等功能。本文将详细介绍 NPM 的安装、配置和使用,帮助您快速上手。
一、Nginx Proxy Manager 的优势
相比于直接配置 Nginx,NPM 具有以下显著优势:
- 图形化界面: 提供直观的 Web UI,所有操作都可通过点击和填写表单完成,无需记忆复杂的 Nginx 指令。
- 简化配置: 自动生成 Nginx 配置文件,用户只需关注业务逻辑,无需深入了解 Nginx 细节。
- 自动化 SSL: 集成 Let's Encrypt,可自动申请、续期和配置 SSL 证书,实现 HTTPS 访问。
- 易于管理: 集中管理多个反向代理规则和 SSL 证书,方便查看和修改。
- 访问控制: 支持基于用户名/密码的访问控制,保护您的服务。
- 高级功能: 支持自定义 Nginx 配置,高级用户可以灵活的扩展功能。
二、安装 Nginx Proxy Manager
NPM 官方推荐使用 Docker 进行安装,这种方式最为简单快捷。
1. 前提条件
- 已安装 Docker 和 Docker Compose。
- 服务器具有公网 IP 地址(用于申请 SSL 证书)。
- 已解析域名到服务器 IP 地址。
2. 创建 docker-compose.yml 文件
在服务器上创建一个目录,例如 nginx-proxy-manager
,然后在该目录下创建 docker-compose.yml
文件,内容如下:
yaml
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
配置说明:
image
: 使用的 Docker 镜像,jc21/nginx-proxy-manager:latest
表示最新版本。restart
: 设置容器重启策略,unless-stopped
表示除非手动停止,否则容器总是自动重启。ports
: 端口映射,将容器内的 80(HTTP)、81(管理界面)和 443(HTTPS)端口映射到宿主机。volumes
: 数据卷映射,将容器内的/data
和/etc/letsencrypt
目录映射到宿主机的./data
和./letsencrypt
目录,用于持久化数据。
3. 启动容器
在 docker-compose.yml
文件所在目录下执行以下命令:
bash
docker-compose up -d
该命令会下载 NPM 镜像并启动容器。-d
参数表示在后台运行。
4. 访问管理界面
容器启动后,可以通过浏览器访问 http://your_server_ip:81
或 http://your_domain:81
进入 NPM 的管理界面。
首次访问时,需要设置管理员邮箱和密码。默认管理员信息如下:
- Email:
[email protected]
- Password:
changeme
强烈建议登录后立即修改默认密码!
三、配置反向代理
NPM 的核心功能是反向代理。通过配置反向代理,可以将不同的域名或路径映射到不同的后端服务。
1. 添加 Proxy Host
登录 NPM 管理界面后,点击左侧导航栏的 "Hosts" -> "Proxy Hosts",然后点击 "Add Proxy Host" 按钮。
2. 填写 General 选项卡
- Domain Names: 填写要代理的域名,可以填写多个,用逗号分隔。例如
example.com, www.example.com
。 - Scheme: 选择协议,一般为
http
或https
。如果后端服务使用 HTTPS,则选择https
。 - Forward Hostname / IP: 填写后端服务的 IP 地址或域名。
- Forward Port: 填写后端服务的端口号。
- Cache Assets: 启用静态资源缓存。
- Block Exploits: 阻止常见漏洞攻击。
- Websockets Support: 启用 WebSocket 支持。
3. 配置 SSL 选项卡(可选)
如果需要为域名配置 HTTPS,则需要配置 SSL 选项卡。
-
SSL Certificate: 选择 SSL 证书的获取方式。
- None: 不使用 SSL。
- Request a new SSL Certificate with Let's Encrypt: 使用 Let's Encrypt 自动申请和配置 SSL 证书(推荐)。
- Upload Custom Certificate: 上传自定义 SSL 证书。
- Use a pre-existing Certificate: 使用已有的证书。
-
Force SSL: 强制 HTTPS 访问,将 HTTP 请求重定向到 HTTPS。
- HTTP/2 Support: 启用 HTTP/2 支持。
如果选择 "Request a new SSL Certificate with Let's Encrypt",则需要填写以下信息:
- Email Address for Let's Encrypt:用于接收证书到期通知的邮箱地址。
- 勾选 "I Agree to the Let's Encrypt Terms of Service"。
4. 配置 Advanced 选项卡(可选)
Advanced 选项卡允许您添加自定义 Nginx 配置。例如,可以添加自定义 header、修改缓存策略等。
示例:添加自定义 header
nginx
add_header X-Custom-Header "My Custom Value";
5. 保存配置
填写完所有配置后,点击 "Save" 按钮保存配置。NPM 会自动生成 Nginx 配置文件并重启 Nginx 服务。
6. 验证配置
配置完成后,可以通过浏览器访问您配置的域名,验证反向代理是否生效。如果一切正常,您应该能够看到后端服务的内容。
四、SSL 证书管理
NPM 集成了 Let's Encrypt,可以自动申请、续期和配置 SSL 证书。
1. 自动申请 SSL 证书
在添加 Proxy Host 时,选择 "Request a new SSL Certificate with Let's Encrypt" 选项,NPM 会自动为您的域名申请 SSL 证书。申请过程需要几分钟时间。
2. 证书续期
Let's Encrypt 证书的有效期为 90 天。NPM 会自动在证书到期前进行续期,无需手动干预。
3. 查看证书信息
在 NPM 管理界面中,点击左侧导航栏的 "SSL Certificates",可以查看已申请的 SSL 证书的详细信息,包括域名、到期时间等。
4. 手动上传证书
如果您已经拥有 SSL 证书,可以在 "SSL Certificates" 页面点击 "Add SSL Certificate" -> "Custom",然后上传您的证书文件和私钥文件。
五、访问控制
NPM 支持基于用户名/密码的访问控制,可以保护您的服务不被未经授权的访问。
1. 添加 Access List
在 NPM 管理界面中,点击左侧导航栏的 "Access Lists",然后点击 "Add Access List" 按钮。
2. 填写 Access List 信息
- Name: Access List 的名称。
- Satisfy Any: 设置访问控制策略。
- Yes: 满足任意一个条件即可访问。
- No: 必须满足所有条件才能访问。
3. 添加授权用户
在 "Authorization" 选项卡中,点击 "Add User" 按钮,填写用户名和密码。
4. 配置 IP 白名单/黑名单(可选)
在 "Access" 选项卡中,可以配置 IP 白名单或黑名单。
- Allowed IPs: 允许访问的 IP 地址,用逗号分隔。
- Denied IPs: 禁止访问的 IP 地址,用逗号分隔。
5. 将 Access List 应用到 Proxy Host
在 Proxy Host 的 "Access List" 选项卡中,选择您创建的 Access List。
六、高级用法
1. 自定义 Nginx 配置
NPM 允许用户在 "Advanced" 选项卡中添加自定义 Nginx 配置,这为高级用户提供了更大的灵活性。您可以在此处添加任何有效的 Nginx 指令,以满足特定的需求。
2. 负载均衡
NPM 支持简单的负载均衡。要实现负载均衡,只需在 "Forward Hostname / IP" 字段中填写多个后端服务器的 IP 地址或域名,用逗号分隔。NPM 会自动将请求分发到不同的后端服务器。
3. 使用 Docker 网络
如果您使用 Docker 部署后端服务,可以将后端服务和 NPM 放在同一个 Docker 网络中,然后使用容器名称作为 "Forward Hostname / IP"。这样可以避免暴露后端服务的端口到宿主机。
4. 监控和日志
NPM 本身不提供详细的监控和日志功能。您可以使用第三方工具来监控 Nginx 的性能和访问日志。
- Nginx Amplify: Nginx 官方提供的监控工具。
- Prometheus + Grafana: 开源的监控和可视化解决方案。
- ELK Stack (Elasticsearch, Logstash, Kibana): 开源的日志分析平台。
5. 备份和恢复
NPM的所有配置和证书都存储在您配置的数据卷 (./data
和 ./letsencrypt
)中。 定期备份这些目录,以防止数据丢失。
如果需要恢复,只需将备份的数据复制到新实例的相应目录中即可。
七、常见问题及解决
-
SSL 证书申请失败:
- 确保域名已正确解析到服务器 IP 地址。
- 确保服务器的 80 端口和 443 端口未被防火墙阻止。
- 检查 Let's Encrypt 的日志,查看是否有错误信息。
-
反向代理不生效:
- 检查 "Forward Hostname / IP" 和 "Forward Port" 是否填写正确。
- 检查后端服务是否正常运行。
- 检查 Nginx 的错误日志,查看是否有错误信息。
-
忘记管理员密码:
如果忘记密码,可以通过以下步骤重置:- 进入运行NPM的docker容器:
docker exec -it <container_id> bash
- 进入sqlite数据库:
sqlite3 /data/database.sqlite
- 更新管理员密码 (将
new_password
替换成你的新密码):
sql
UPDATE user SET password = '$2y$10$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' WHERE id = 1;
注意:$2y$10$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
是bcrypt加密后的密码hash值。你需要先生成你新密码的bcrypt hash值。可以使用在线工具或编程语言(如Python的bcrypt库)生成。
- 进入运行NPM的docker容器:
-
端口冲突
如果服务器上已经运行了其他服务占用了80或443端口,NPM将无法启动。你需要停止这些服务或更改NPM的端口映射。
八、总结
Nginx Proxy Manager 是一款强大且易于使用的反向代理管理工具。它极大地简化了 Nginx 的配置和管理,让用户能够轻松实现反向代理、SSL 证书配置、负载均衡等功能。通过本文的详细介绍,相信您已经掌握了 NPM 的基本使用方法。如果您有更高级的需求,可以进一步探索 NPM 的高级功能和自定义配置。
希望这篇文章对您有所帮助!