Docker 玩法

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

2026-07-30 2 admin

在家庭或小型办公网络中,飞牛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

首次访问会看到登录界面。默认管理员账号和密码如下:

登录后,系统会强制要求修改密码。请设置一个强密码并牢记。

第四步:配置反向代理示例

假设你已经在飞牛NAS上运行了一个Jellyfin服务,端口为8096,现在想通过jellyfin.yourdomain.com访问它。

4.1 添加代理主机

  1. 登录NPM管理面板,点击左侧菜单“Hosts” -> “Proxy Hosts”。
  2. 点击右上角的“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证书。

  1. 点击“SSL”选项卡。
  2. 勾选“Force SSL”和“HTTP/2 Support”。
  3. 在“SSL Certificate”下拉菜单中,选择“Request a new SSL Certificate”。
  4. 填写你的邮箱(用于Let’s Encrypt通知)和域名(应与上面填写的完全一致,例如jellyfin.yourdomain.com)。
  5. 勾选“I agree to the Let's Encrypt Terms of Service”。
  6. 点击“Save”保存。

如果一切正常,NPM会自动申请证书并启用HTTPS。稍等片刻,访问https://jellyfin.yourdomain.com即可看到Jellyfin界面。

第五步:高级配置(可选)

5.1 访问控制

如果你希望只允许特定IP访问某个服务,可以在“Access List”中创建规则。

  1. 点击左侧“Access Lists” -> “Add Access List”。
  2. 输入名称(如“HomeNetwork”)。
  3. 添加允许的IP或CIDR(如192.168.1.0/24)。
  4. 在代理主机的“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:80443:443保持不变,只修改81:81前面的端口号。例如改为82:81,然后docker-compose up -d重新创建容器。

结语

通过Nginx Proxy Manager,你可以轻松地将飞牛NAS上的多个服务统一通过域名和HTTPS暴露,告别混乱的端口号和不安全的HTTP连接。本文的部署过程仅需几分钟,后续的管理也完全通过图形界面完成,大大降低了反向代理的使用门槛。

现在,你可以继续添加其他服务,如Nextcloud、Home Assistant、Gitea等,让飞牛NAS成为真正的一站式家庭服务器中心。如果你在部署过程中遇到任何问题,欢迎在评论区留言交流。