Docker 玩法

飞牛NAS部署Nginx Proxy Manager:反向代理利器

飞牛NAS(fnOS)作为一款面向家庭和中小型企业的国产NAS系统,凭借其简洁的界面和强大的Docker支持,正在吸引越来越多的用户。今天,我们不讲存储,不讲影音,来聊聊如何利用Docker在飞牛NAS上部署一个堪称“神器”的反向代理工具——Nginx Proxy Manager(简称NPM)。有了它,你可以通过优雅的域名或子域名访问内网的各种服务,再也不用记难看的“IP:端口”了。

为什么要用Nginx Proxy Manager?

在传统方案中,配置Nginx反向代理需要编写复杂的server块配置,还要处理SSL证书的申请和续期,对新手极不友好。Nginx Proxy Manager则提供了一个清爽的Web界面,让你通过鼠标点击就能完成以下操作:

  1. 可视化配置代理转发规则(支持HTTP、HTTPS、TCP、UDP)。
  2. 免费申请和自动续期Let‘s Encrypt SSL证书。
  3. 启用访问控制列表(如IP白名单、Basic Auth)。
  4. 实时查看访问日志和错误日志。
  5. 自定义404页面、强制HTTPS跳转等高级功能。

对于飞牛NAS用户而言,这意味着你可以将NAS上的Jellyfin、qBittorrent、PhotoPrism、Home Assistant等所有服务统一暴露在一个域名下,并通过子路径或子域名进行区分,安全又美观。

第一步:在飞牛NAS上准备环境

飞牛NAS的Docker管理界面非常直观。请确保你的fnOS系统版本较新,且已开启Docker服务(通常默认开启)。

打开飞牛NAS的「Docker」应用,进入「镜像」页面,在搜索框中输入jc21/nginx-proxy-manager,选择最新版本(通常是latest2.x)并点击下载。由于镜像约300MB,请耐心等待。

第二步:创建并配置容器

镜像下载完成后,点击「创建容器」。这里有几个关键配置需要特别注意:

  1. 端口映射:NPM默认需要映射三个端口。
  2. 80:用于HTTP代理入口(必须映射,否则无法转发)。
  3. 443:用于HTTPS代理入口(必须映射)。
  4. 81:这是NPM的管理面板端口(必须映射,用于访问Web UI)。 在飞牛NAS中,建议将宿主机的端口也设为8044381,除非这些端口已被占用。例如,如果NAS的80端口被其他服务占用,可映射为8080:80,但后续访问代理服务时需加上端口号,略显不便。

  5. 数据卷挂载:务必挂载一个数据卷用于持久化数据库和证书。

  6. 在「存储」设置中,点击「添加」,选择NAS上的一个文件目录(建议在Docker目录下新建npm/data),容器路径填/data
  7. 再添加一个目录用于存放SSL证书(可选,但推荐),容器路径填/etc/letsencrypt。如果你没有预先创建目录,飞牛NAS会提示自动创建。

  8. 环境变量:通常无需额外设置,保持默认即可。如果你需要修改数据库类型(默认SQLite足够),可自行研究。

点击「创建」后,容器会自动启动。在浏览器中访问http://你的飞牛NAS_IP:81,即可看到NPM的登录界面。

第三步:初始化管理员账户

首次访问会显示“Sign in”页面,但你需要先点击页面底部的“Create Admin User”链接来创建管理员。

输入你的邮箱和强密码,点击提交。系统会提示“User created successfully”,然后自动跳转到登录页。使用刚创建的账户登录,进入NPM的主界面(Dashboard)。

第四步:实战配置第一个反向代理

假设你已经在飞牛NAS上运行了一个Jellyfin媒体服务器,端口为8096。现在,我们想通过http://jellyfin.yourdomain.com来访问它。

  1. 在NPM主界面左侧菜单点击「Hosts」,然后选择「Proxy Hosts」。
  2. 点击右上角的「Add Proxy Host」按钮。
  3. 在「Domain Names」输入框中填写你的完整域名,例如jellyfin.example.com。如果你没有域名,也可以直接填写NAS的IP地址和端口(不推荐,但可用于测试)。
  4. 在「Forward Hostname / IP」填写192.168.1.100(你的飞牛NAS内网IP,或直接填127.0.0.1也可,因为NPM容器与NAS共享网络栈)。在「Forward Port」填写8096
  5. 其他选项保持默认。如果你想启用WebSocket支持(对某些应用如实时聊天、终端很重要),可以打开「Websockets Support」开关。
  6. 点击「Save」。

保存后,你会看到该代理条目出现在列表中,状态为“Online”。现在,在你的浏览器中访问http://jellyfin.example.com,如果域名解析正确,就能成功打开Jellyfin界面。是不是比记忆http://192.168.1.100:8096舒服多了?

第五步:配置SSL证书(HTTPS)

HTTP毕竟不安全,我们给它加上SSL。在NPM中,SSL配置极其简单。

  1. 在代理列表中找到刚才创建的条目,点击右侧的「Edit」。
  2. 切换到「SSL」标签页。
  3. 选择「Request a new SSL Certificate」。
  4. 勾选「Force SSL」和「HTTP/2 Support」。在「Let‘s Encrypt」中,确保勾选了「Agree to Terms of Service」。
  5. 在「Domain Name」中确认是你的域名,点击「Save」。
  6. 等待几秒到几十秒,NPM会自动向Let's Encrypt申请证书并配置好。如果成功,你会看到证书有效期和签发信息。

现在,访问https://jellyfin.example.com,浏览器地址栏会显示小锁标志,全程自动加密,且证书到期会自动续期,完全无需你操心。

进阶玩法:使用子路径和访问控制

你可能会想,如果只有一个域名,怎么代理多个服务?NPM支持通过子路径区分,但更推荐使用子域名(如jellyfin.xx.comqb.xx.com)。如果你没有泛域名解析,也可以使用子路径,例如https://xx.com/jellyfin。在NPM中,只需在「Domain Names」里填xx.com/jellyfin,转发目标不变即可。不过要注意,部分应用(如Jellyfin)对子路径支持不佳,可能需要额外配置应用本身的Base URL,所以更稳妥的方案还是子域名。

另外,NPM的「Access Lists」功能非常实用。比如你希望某个代理只允许家里IP访问,可以在「Access Lists」中创建一个白名单列表,然后在代理的「Access List」选项中选择它。这样,外部IP访问会被拒绝,极大地提升了安全性。

常见问题与解决建议

如果配置后无法访问,请按以下顺序排查:

  1. 确认NPM容器运行正常,端口映射正确(特别是80和443)。
  2. 确认你的路由器已做端口转发(如果从外网访问),将公网IP的80/443端口转发到NAS的对应端口。
  3. 检查域名解析是否指向了正确的公网IP或NAS IP。
  4. 查看NPM的日志(容器日志),通常有明确的错误提示。
  5. 如果代理服务本身是HTTP,但NPM设了HTTPS,请确保目标服务不需要修改Host头,必要时可在「Advanced」标签页自定义Nginx配置,例如proxy_set_header Host $host;

总结

Nginx Proxy Manager将复杂的Nginx配置封装成了直观的图形化操作,配合飞牛NAS的Docker功能,让你在几分钟内就能搭建出一个专业级的反向代理网关。无论是家用内网服务整合,还是借助公网IP和域名对外提供安全的访问入口,NPM都能轻松胜任。它不仅是技术爱好者的玩具,更是提升NAS使用体验的必备利器。希望这篇教程能帮你顺利部署,从此告别“IP+端口”的混乱时代。如果你在部署中遇到问题,欢迎在评论区留言交流。

💬 评论区
发表评论

暂无评论,来说两句吧