Docker 玩法

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

在飞牛NAS(fnOS)上部署服务时,随着容器越来越多,端口管理会变得混乱,尤其是当你希望用域名或子路径访问不同应用时,默认的IP加端口方式既不好记也不安全。Nginx Proxy Manager(简称NPM)正是解决这一痛点的利器。它提供了一个友好的Web界面,让你无需编写复杂的Nginx配置,即可轻松实现反向代理、SSL证书自动续签和访问控制。今天,我们就一步步在飞牛NAS上部署它。

为什么选择Nginx Proxy Manager

NPM的核心价值在于把Nginx的配置工作可视化。你不需要记住proxy_passserver_name等指令,只需在浏览器里填写表单,它就能生成并管理配置文件。对于飞牛NAS用户来说,这意味着:

  • 域名访问:将http://192.168.1.100:8123变成http://home.example.com
  • 统一管理:所有容器的入口都收敛到80/443端口,其他端口无需再映射到宿主机。
  • 免费HTTPS:内置Let's Encrypt插件,一键签发和续期SSL证书。
  • 高级控制:支持访问列表(IP白名单)、自定义Nginx配置注入,满足进阶需求。

前提准备

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

  1. 已安装Docker和Docker Compose(飞牛NAS应用中心可一键安装)。
  2. 拥有一个已解析到NAS公网IP的域名(如果仅内网使用,可跳过)。
  3. 计划占用宿主机的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为例:

  1. Domain Names:输入ha.example.com。如果有多个域名,每个占一行。
  2. Scheme:选择http(如果目标容器是HTTPS,则选https)。
  3. Forward Hostname / IP:输入192.168.1.100(你的NAS内网IP,或容器的名称,但推荐用IP)。
  4. Forward Port:输入8123
  5. Block Common Exploits:建议勾选,增加基础安全防护。

点击「Save」后,NPM会自动生成Nginx配置并重载。此时,如果你在内网尝试访问http://ha.example.com,且DNS已解析到NAS,应该能正常看到Home Assistant界面。

第五步:启用SSL证书(HTTPS)

在刚才创建的代理条目右侧,点击「Edit」,切换到「SSL」标签页:

  1. 勾选「Force SSL」和「HTTP/2 Support」。
  2. 在「SSL Certificate」下拉菜单中,选择「Request a new SSL Certificate」。
  3. 勾选「Use a Let's Encrypt SSL certificate」。
  4. 输入你的邮箱(用于证书到期提醒),并勾选「Agree to Let's Encrypt Terms of Service」。
  5. 点击「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生态,这套方案足以满足家庭或小型工作室的绝大多数需求。现在就动手部署,体验一把“配置即所得”的快感吧。

💬 评论区
发表评论

暂无评论,来说两句吧