Docker 玩法

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

2026-07-30 2 admin

在飞牛NAS上部署 Nginx Proxy Manager,可以轻松完成反向代理与SSL证书管理,实现内外网服务的一键代理。这个工具对家庭NAS用户来说非常实用,尤其是当你运行了多个Docker容器,希望通过一个域名和端口统一访问时。本文将以飞牛NAS(fnOS)为基础,手把手带你完成部署。

准备工作

在开始前,请确保你的飞牛NAS已经满足以下条件:

  • 飞牛NAS系统已更新到最新版本(当前基于Debian 12,Docker支持完善)。
  • 已安装Docker和Docker Compose(飞牛NAS应用中心默认已包含,无需额外安装)。
  • 拥有一个公网IP或已配置DDNS(动态域名解析),以便外部访问。
  • 已开放NAS的80、443端口(用于Nginx Proxy Manager的HTTP和HTTPS监听)。

如果端口被占用,需要先停用其他占用80/443的服务。飞牛NAS的Web管理界面默认使用8000端口,通常不影响。

第一步:创建Docker Compose配置文件

推荐使用Docker Compose来管理Nginx Proxy Manager,这样升级和迁移都很方便。在飞牛NAS的文件管理器中,选择一个存放配置文件的目录,比如/docker/npm。然后在该目录下新建一个docker-compose.yml文件。

你可以通过SSH登录NAS,或者直接在文件管理器中使用“新建” -> “文本文件”功能。下面是完整的配置内容:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: always
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - npm_network

networks:
  npm_network:
    driver: bridge

这里我们做了几件事:

  • 将宿主机的80、443端口映射到容器,用于反向代理的HTTP和HTTPS流量。
  • 将宿主机的81端口映射到容器的81端口,这是Nginx Proxy Manager的Web管理界面。
  • 挂载了两个数据卷:./data存放数据库和配置,./letsencrypt存放SSL证书。
  • 创建了一个名为npm_network的桥接网络,方便后续其他容器加入同一网络,直接通过容器名通信。

如果你希望管理界面使用其他端口(比如82),可以修改81:8182:81,但建议保留81以便记忆。

第二步:启动容器

docker-compose.yml所在目录打开终端(飞牛NAS的SSH功能需要先在控制面板中开启),或者使用飞牛NAS自带的“终端”应用(位于应用中心)。执行以下命令:

cd /docker/npm
docker-compose up -d

等待几分钟,Docker会自动拉取镜像并启动容器。你可以通过docker-compose ps检查服务状态,如果看到Up字样,说明启动成功。

如果遇到端口冲突,请检查是否有其他服务占用了80、443或81端口。例如,如果飞牛NAS的系统服务占用了80,你需要先停止它(不推荐,会影响系统功能),或者调整Nginx Proxy Manager的端口映射,比如将80:80改为8080:80,但这样外部访问时就需要带端口号。

第三步:访问管理界面并初始化

打开浏览器,输入http://你的NAS内网IP:81,比如http://192.168.1.100:81。首次访问会看到登录页面,默认管理员账号和密码是:

登录后,系统会强制你修改邮箱和密码。建议使用真实的邮箱地址,用于SSL证书的邮件通知。密码请设置复杂一些,最好包含大小写字母、数字和特殊符号。

修改完成后,你会进入Nginx Proxy Manager的控制面板。界面非常直观,左侧菜单包含仪表盘、代理主机、SSL证书、流式代理等。

第四步:配置反向代理规则

现在我们来添加一个代理规则,假设你在飞牛NAS上运行了一个Jellyfin媒体服务,端口为8096,希望通过jellyfin.yourdomain.com来访问。

在左侧菜单点击“代理主机”(Proxy Hosts),然后点击“添加代理主机”(Add Proxy Host)。在弹出窗口中填写:

  • 域名:jellyfin.yourdomain.com
  • 转发主机名/IP:192.168.1.100(你的NAS内网IP)
  • 转发端口:8096
  • 勾选“缓存资产”(Cache Assets)可以提升性能。

如果你希望内部容器之间通信更高效,可以将“转发主机名/IP”设置为容器名称(前提是这些容器都加入了同一个Docker网络)。例如,如果Jellyfin的容器名是jellyfin,并且与NPM在同一网络(我们之前创建的npm_network),则可以直接填写jellyfin。这需要你在启动Jellyfin时也指定加入npm_network网络。

第五步:申请SSL证书

为了让你的网站支持HTTPS,Nginx Proxy Manager内置了Let‘s Encrypt证书申请功能。在刚才添加代理主机的窗口,切换到“SSL”标签页,进行如下设置:

  • SSL证书:选择“请求一个新的SSL证书”(Request a new SSL Certificate)
  • 邮箱:填写你的真实邮箱(用于证书到期提醒)
  • 勾选“同意Let’s Encrypt服务条款”
  • 勾选“强制SSL重定向”(Force SSL),这样所有HTTP请求会自动跳转到HTTPS。

点击“保存”后,系统会自动验证域名所有权(需要你的域名已解析到NAS的公网IP),并自动配置证书。整个过程通常只需几十秒。成功后在代理主机列表中会显示一个绿色的小锁图标。

第六步:高级配置与优化

配置WebSocket支持

如果你需要代理支持WebSocket的服务(比如Home Assistant、Syncthing),需要在代理主机的“高级”(Advanced)选项卡中添加以下配置:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

限制访问来源

你可以在“访问列表”(Access Lists)中创建规则,只允许特定IP或IP段访问某个代理主机,增强安全性。例如,只允许内网IP段192.168.1.0/24访问管理后台。

使用Docker网络别名

如果你有很多容器需要代理,建议将所有相关容器都加入npm_network,并在代理主机中使用容器名作为转发主机。这样可以避免依赖固定的IP地址,容器重启后也能正常通信。

常见问题与排错

问题1:无法访问管理界面 检查防火墙是否开放了81端口。飞牛NAS默认防火墙规则较宽松,但如果修改过,需要手动放行。

问题2:SSL证书申请失败 确认你的域名已经正确解析到NAS的公网IP,并且80端口可以从外网访问。Let‘s Encrypt在验证域名时会尝试通过80端口访问你的服务器。

问题3:代理的服务无法正常加载静态资源 这通常是WebSocket或路径重写问题。检查你的代理主机是否勾选了“缓存资产”,或者尝试在“高级”中添加以下配置:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

总结

通过以上步骤,你已经在飞牛NAS上成功部署了Nginx Proxy Manager,并配置了反向代理与SSL证书。整个过程无需手动编辑Nginx配置文件,小白用户也能轻松上手。现在,你可以将NAS上运行的各种服务(如Jellyfin、Bitwarden、Home Assistant等)通过统一的域名和标准端口(443)对外发布,同时享受Let’s Encrypt自动续期的HTTPS加密。这个工具不仅能提升访问体验,还能显著增强家庭网络的安全性。