在飞牛NAS(fnOS)上部署服务时,随着容器越来越多,端口管理会变得混乱,尤其是当你希望用域名或子路径访问不同应用时,默认的IP加端口方式既不好记也不安全。Nginx Proxy Manager(简称NPM)正是解决这一痛点的利器。它提供了一个友好的Web界面,让你无需编写复杂的Nginx配置,即可轻松实现反向代理、SSL证书自动续签和访问控制。今天,我们就一步步在飞牛NAS上部署它。
为什么选择Nginx Proxy Manager
NPM的核心价值在于把Nginx的配置工作可视化。你不需要记住proxy_pass、server_name等指令,只需在浏览器里填写表单,它就能生成并管理配置文件。对于飞牛NAS用户来说,这意味着:
- 域名访问:将
http://192.168.1.100:8123变成http://home.example.com。
- 统一管理:所有容器的入口都收敛到80/443端口,其他端口无需再映射到宿主机。
- 免费HTTPS:内置Let's Encrypt插件,一键签发和续期SSL证书。
- 高级控制:支持访问列表(IP白名单)、自定义Nginx配置注入,满足进阶需求。
前提准备
开始前,请确保你的飞牛NAS满足以下条件:
- 已安装Docker和Docker Compose(飞牛NAS应用中心可一键安装)。
- 拥有一个已解析到NAS公网IP的域名(如果仅内网使用,可跳过)。
- 计划占用宿主机的80和443端口,请确认未被其他服务占用(如飞牛Web界面默认使用5666端口,通常无冲突)。
第一步:创建持久化目录
NPM需要保存配置和证书数据。打开飞牛NAS的SSH终端(或使用文件管理器新建文件夹),执行以下命令创建目录并赋予权限:
sudo mkdir -p /vol1/docker/npm/data
sudo mkdir -p /vol1/docker/npm/letsencrypt
sudo chown -R 1000:1000 /vol1/docker/npm
注意:/vol1是飞牛NAS默认存储池路径,请根据你的实际存储位置调整。
第二步:编写docker-compose.yml
在/vol1/docker/npm目录下新建docker-compose.yml文件,内容如下:
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" # NPM管理界面
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
这里将管理界面映射到宿主机的81端口,避免与主站点冲突。如果你希望用不同端口,修改最后一行冒号前的数字即可。
第三步:启动并登录管理界面
在/vol1/docker/npm目录下执行:
docker-compose up -d
等待镜像拉取和容器启动。完成后,浏览器访问http://你的NAS_IP:81,首次打开会显示登录页。默认管理员账号是[email protected],密码是changeme。登录后系统会强制你修改邮箱和密码,请务必牢记新密码。
第四步:配置反向代理(核心操作)
登录后,点击顶部导航栏的「Hosts」->「Proxy Hosts」,然后点击「Add Proxy Host」按钮。这里我们以将一个运行在NAS 8123端口的Home Assistant容器映射到ha.example.com为例:
- Domain Names:输入
ha.example.com。如果有多个域名,每个占一行。
- Scheme:选择
http(如果目标容器是HTTPS,则选https)。
- Forward Hostname / IP:输入
192.168.1.100(你的NAS内网IP,或容器的名称,但推荐用IP)。
- Forward Port:输入
8123。
- Block Common Exploits:建议勾选,增加基础安全防护。
点击「Save」后,NPM会自动生成Nginx配置并重载。此时,如果你在内网尝试访问http://ha.example.com,且DNS已解析到NAS,应该能正常看到Home Assistant界面。
第五步:启用SSL证书(HTTPS)
在刚才创建的代理条目右侧,点击「Edit」,切换到「SSL」标签页:
- 勾选「Force SSL」和「HTTP/2 Support」。
- 在「SSL Certificate」下拉菜单中,选择「Request a new SSL Certificate」。
- 勾选「Use a Let's Encrypt SSL certificate」。
- 输入你的邮箱(用于证书到期提醒),并勾选「Agree to Let's Encrypt Terms of Service」。
- 点击「Save」。
如果DNS解析正确且80端口可被外网访问,证书会在几秒内自动签发。之后,你的站点就会自动跳转到HTTPS,且证书到期前NPM会自动续期。
进阶技巧:子路径代理与访问控制
- 子路径代理:在「Add Proxy Host」时,在「Advanced」标签页的「Custom Nginx Configuration」里输入:
location /ha/ {
proxy_pass http://192.168.1.100:8123/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
这样可以实现用https://example.com/ha/访问不同容器,但需要注意目标应用是否支持子路径部署。
- 访问控制:在代理条目的「Access Lists」中创建新列表,填入允许的IP段(如
192.168.1.0/24),再将该列表绑定到代理条目上。这样只有内网设备能访问,外网请求会被拒绝。
常见问题排查
- 页面无法访问:检查NPM所在容器是否成功连接目标端口。在NPM的「Logs」中查看报错,通常为
502 Bad Gateway,说明目标地址或端口错误。
- 证书签发失败:确保域名解析正确且80端口可从公网访问。部分家庭宽带封禁80端口,可使用
dns-challenge方式,但配置较复杂,建议先用HTTP验证。
- 端口冲突:如果81端口被占用,修改docker-compose.yml中的映射并重新
docker-compose up -d。
总结
通过Nginx Proxy Manager,飞牛NAS上的服务管理变得井井有条。你不再需要记忆一串端口号,只需维护一个简洁的域名映射表。更关键的是,SSL证书的自动续签功能让HTTPS维护成本几乎为零。无论是自建博客、智能家居中枢还是私人云盘,NPM都能作为你的统一流量入口。配合飞牛NAS的稳定存储和Docker生态,这套方案足以满足家庭或小型工作室的绝大多数需求。现在就动手部署,体验一把“配置即所得”的快感吧。