飞牛NAS部署 Nginx Proxy Manager:反向代理利器
在家庭或小型办公网络中,飞牛NAS作为一款高性能的存储设备,常常需要对外暴露Web服务,例如Jellyfin、Nextcloud、Home Assistant等。然而,直接通过IP+端口访问不仅不安全,还容易暴露内网结构。这时,一个强大的反向代理工具就显得尤为重要。
Nginx Proxy Manager(简称NPM)是一款基于Nginx的图形化管理工具,它允许你通过Web界面轻松配置反向代理、SSL证书、访问控制等,无需手动编写复杂的Nginx配置文件。本文将手把手教你如何在飞牛NAS上部署Nginx Proxy Manager,并配置一个简单的反向代理示例。
为什么选择Nginx Proxy Manager?
- 图形化界面:无需记忆命令行参数,通过浏览器即可完成所有配置。
- 自动SSL证书:支持Let’s Encrypt免费证书,一键申请和续期。
- 访问控制:可设置白名单、黑名单、Basic Auth认证。
- 多主机支持:轻松管理多个域名和子域名。
- 与飞牛NAS完美兼容:飞牛NAS基于Debian/Ubuntu,Docker生态成熟,部署简单。
前提条件
- 一台已安装飞牛NAS系统的设备(建议飞牛OS v0.8.0及以上版本)。
- 已安装Docker和Docker Compose(飞牛NAS通常预装,可通过
docker --version确认)。 - 拥有一个可用的域名,并已将域名解析到你的公网IP(或内网IP用于测试)。
- 确保NAS的80和443端口未被占用(NPM需要这两个端口)。
第一步:准备Docker Compose文件
Nginx Proxy Manager官方提供了Docker镜像,我们使用Docker Compose来定义服务。首先,SSH登录到飞牛NAS,或直接在飞牛NAS的终端中操作。
# 创建一个目录用于存放NPM的配置文件
mkdir -p /docker/nginx-proxy-manager
cd /docker/nginx-proxy-manager
创建一个名为docker-compose.yml的文件:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# 这些端口不能修改,因为NPM内部硬编码了这些端口
- '80:80' # HTTP
- '81:81' # 管理面板
- '443:443' # HTTPS
volumes:
# 数据持久化
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
# 时区设置,根据你的位置调整
- TZ=Asia/Shanghai
注意:管理面板默认运行在81端口,你可以将其映射到其他端口(如
81:81),但建议保持内部81不变。如果NAS上已有其他服务占用80/443,需要先停止或更改端口。
第二步:启动容器
在/docker/nginx-proxy-manager目录下,执行以下命令:
docker-compose up -d
等待镜像拉取并启动。你可以通过docker ps查看容器是否正常运行:
docker ps | grep nginx-proxy-manager
看到类似CONTAINER ID IMAGE COMMAND PORTS NAMES的输出,并且状态为Up,说明启动成功。
第三步:访问管理面板
打开浏览器,输入http://你的飞牛NASIP:81。例如:http://192.168.1.100:81。
首次访问会看到登录界面。默认管理员账号和密码如下:
- Email:
[email protected] - Password:
changeme
登录后,系统会强制要求修改密码。请设置一个强密码并牢记。
第四步:配置反向代理示例
假设你已经在飞牛NAS上运行了一个Jellyfin服务,端口为8096,现在想通过jellyfin.yourdomain.com访问它。
4.1 添加代理主机
- 登录NPM管理面板,点击左侧菜单“Hosts” -> “Proxy Hosts”。
- 点击右上角的“Add Proxy Host”按钮。
4.2 填写域名和转发规则
- Domain Names: 输入你的完整域名,例如
jellyfin.yourdomain.com。 - Scheme: 选择
http(如果后端服务是https则选https)。 - Forward Hostname / IP: 输入你飞牛NAS的内网IP,例如
192.168.1.100。 - Forward Port: 输入Jellyfin的端口
8096。 - Cache Assets: 建议开启,加速静态资源访问。
- Block Common Exploits: 开启,增强安全性。
4.3 配置SSL证书
为了启用HTTPS,你需要申请SSL证书。
- 点击“SSL”选项卡。
- 勾选“Force SSL”和“HTTP/2 Support”。
- 在“SSL Certificate”下拉菜单中,选择“Request a new SSL Certificate”。
- 填写你的邮箱(用于Let’s Encrypt通知)和域名(应与上面填写的完全一致,例如
jellyfin.yourdomain.com)。 - 勾选“I agree to the Let's Encrypt Terms of Service”。
- 点击“Save”保存。
如果一切正常,NPM会自动申请证书并启用HTTPS。稍等片刻,访问https://jellyfin.yourdomain.com即可看到Jellyfin界面。
第五步:高级配置(可选)
5.1 访问控制
如果你希望只允许特定IP访问某个服务,可以在“Access List”中创建规则。
- 点击左侧“Access Lists” -> “Add Access List”。
- 输入名称(如“HomeNetwork”)。
- 添加允许的IP或CIDR(如
192.168.1.0/24)。 - 在代理主机的“Advanced”选项卡中,选择该访问列表。
5.2 自定义Nginx配置
对于更复杂的需求(如自定义请求头、重写规则),可以在代理主机的“Advanced”选项卡中添加自定义Nginx配置片段。例如,限制上传文件大小:
client_max_body_size 100M;
常见问题与排错
Q1: 访问管理面板时显示“Bad Gateway”?
- 检查NPM容器是否正常运行:
docker ps -a。 - 查看日志:
docker logs nginx-proxy-manager。 - 确认81端口未被其他服务占用。
Q2: SSL证书申请失败?
- 确保你的域名已正确解析到NAS的公网IP。
- 检查80端口是否开放,因为Let’s Encrypt验证需要访问80端口。
- 如果NAS在NAT后面,需要配置端口转发。
Q3: 如何更改管理面板的端口?
- 编辑
docker-compose.yml,将80:80和443:443保持不变,只修改81:81前面的端口号。例如改为82:81,然后docker-compose up -d重新创建容器。
结语
通过Nginx Proxy Manager,你可以轻松地将飞牛NAS上的多个服务统一通过域名和HTTPS暴露,告别混乱的端口号和不安全的HTTP连接。本文的部署过程仅需几分钟,后续的管理也完全通过图形界面完成,大大降低了反向代理的使用门槛。
现在,你可以继续添加其他服务,如Nextcloud、Home Assistant、Gitea等,让飞牛NAS成为真正的一站式家庭服务器中心。如果你在部署过程中遇到任何问题,欢迎在评论区留言交流。