在搭建家庭服务器或NAS时,我们通常会部署多个Web服务(如Nextcloud、Jellyfin、Home Assistant等),每个服务都需要通过域名和HTTPS访问。Nginx Proxy Manager(简称NPM)是一款基于Nginx的反向代理管理工具,提供了友好的Web界面,让配置反向代理和SSL证书变得异常简单。今天这篇文章,我们来详细介绍NPM的使用方法。

一、什么是反向代理?为什么需要它?

反向代理(Reverse Proxy)是一种服务器架构模式,客户端不直接访问后端服务,而是先访问反向代理服务器,由反向代理将请求转发给对应的后端服务。

反向代理的主要作用:

统一入口:多个后端服务可以通过不同的子域名或路径,统一通过80/443端口对外提供服务。

SSL终端:在反向代理层统一处理HTTPS加密,后端服务可以使用普通的HTTP,简化配置。

负载均衡:可以将请求分发到多个后端服务器,提高可用性和性能。

安全防护:隐藏后端服务器的真实IP和端口,增加安全性。

举个例子:你有Jellyfin运行在8096端口,Nextcloud运行在8080端口,Home Assistant运行在8123端口。通过反向代理,你可以用jellyfin.yourdomain.com、cloud.yourdomain.com、ha.yourdomain.com这样的域名访问它们,而不需要记端口号。

二、Nginx Proxy Manager简介

Nginx Proxy Manager是基于Nginx和Node.js开发的开源工具,它将复杂的Nginx配置转化为简单的Web界面操作:

可视化配置:通过Web界面添加、修改代理规则
自动SSL证书:集成Let's Encrypt,一键申请和续期SSL证书
访问控制:支持Basic Auth、IP白名单等访问限制
重定向:支持HTTP自动跳转到HTTPS
自定义Nginx配置:高级用户可以添加自定义配置

三、Docker部署NPM

NPM官方推荐通过Docker部署,以下是docker-compose配置:

```yaml
version: '3.8'
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80" # HTTP端口
- "443:443" # HTTPS端口
- "81:81" # 管理界面端口
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
- DB_SQLITE_FILE=/data/database.sqlite
```

部署完成后,访问http://服务器IP:81进入管理界面。

默认登录信息
邮箱:admin@example.com
密码:changeme

首次登录后务必修改默认密码!

四、配置反向代理实战

场景1:代理本地服务

假设你有一个Jellyfin服务运行在192.168.1.100:8096,想通过jellyfin.yourdomain.com访问:

1. 在NPM界面点击"Proxy Hosts"→"Add Proxy Host"
2. Domain Names:填写jellyfin.yourdomain.com
3. Scheme:选择http(如果后端是HTTPS则选https)
4. Forward Hostname/IP:填写192.168.1.100
5. Forward Port:填写8096
6. 勾选"Block Common Exploits"(阻止常见攻击)
7. 保存

场景2:配置SSL证书

1. 编辑刚才创建的代理规则
2. 切换到"SSL"标签页
3. SSL Certificate:选择"Request a new SSL Certificate"
4. 勾选"Force SSL"(强制HTTPS)
5. 勾选"I Agree to the Let's Encrypt Terms of Service"
6. 保存,NPM会自动申请证书

场景3:添加访问密码

1. 在"Access Lists"中创建访问列表
2. 设置用户名和密码
3. 在代理规则中选择该访问列表

五、进阶技巧与注意事项

泛域名证书

如果你有多个子域名,可以申请通配符证书(*.yourdomain.com),这样所有子域名共用一个证书。

WebSocket支持

某些应用(如Home Assistant、Code Server)使用WebSocket,需要在代理设置中开启"Websockets Support"。

自定义Location

在"Advanced"标签页可以添加自定义Nginx配置,满足特殊需求。

备份配置

定期备份./data目录,里面包含了所有的配置信息。

端口冲突

NPM需要使用80和443端口,确保这些端口没有被其他服务占用。

Nginx Proxy Manager极大地简化了反向代理的配置过程,即使是不熟悉Nginx的用户也能快速上手。如果你正在搭建家庭服务器,强烈推荐使用NPM来管理你的Web服务!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。