技术笔记

Nginx Proxy Manager:给 NAS 上的每个服务一个正经域名和 HTTPS

yaobingbin yaobingbin · · 约 6 分钟 · 0 条评论
Nginx Proxy Manager:给 NAS 上的每个服务一个正经域名和 HTTPS

一句话结论

NAS 上服务一多,`192.168.1.x:8096` 这种地址就没法用了——记不住、不安全、也没法给家人用。Nginx Proxy Manager(下文简称 NPM)是解决这个问题性价比最高的方案:图形界面点几下,把每个服务映射成一个子域名,免费证书自动申请、自动续期。它是我在 NAS 上装过的所有 Docker 应用里,单位时间收益最高的一个。

它到底解决什么

先看没有 NPM 时的样子:

服务 访问方式
Jellyfin `192.168.1.100:8096`
相册 `192.168.1.100:2342`
密码库 `192.168.1.100:8222`
NAS 后台 `192.168.1.100:5666`

四个服务四个端口,家里人根本记不住,而且全是 HTTP,浏览器一直提示不安全。

装了 NPM 之后:

服务 访问方式
Jellyfin `https://video.example.com`
相册 `https://photo.example.com`
密码库 `https://pass.example.com`
NAS 后台 `https://nas.example.com`

端口全部收口到 80/443,对外只暴露一个入口,证书自动续期。

部署:一份 Compose 就够

在你的应用数据目录下建一个 `npm` 文件夹,放 `docker-compose.yml`:

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      - TZ=Asia/Shanghai

然后 `docker compose up -d`。

三个端口要分清:

端口 用途
80 HTTP 入口,证书申请时校验也要用
443 HTTPS 入口,日常访问走这里
81 管理后台,只有你自己用

第一次打开管理后台是 `http://NAS的内网IP:81`。

第一次登录,先把默认账号改掉

NPM 有内置的默认管理员账号(`admin@example.com` / `changeme`),首次登录会强制让你改邮箱和密码。这一步别跳过,这是你整个反向代理的钥匙。

添加一个服务的完整流程

以把 Jellyfin 映射成 `video.example.com` 为例:

1. 管理后台进 Proxy Hosts → Add Proxy Host 2. Domain Names 填 `video.example.com` 3. Scheme 选 `http`(内网这一段用 HTTP 就行,HTTPS 由 NPM 这一层负责) 4. Forward Hostname/IP 填 NAS 的内网 IP 5. Forward Port 填 `8096` 6. 切到 SSL 标签页,选 Request a new SSL Certificate,勾上 Force SSL 和 HTTP/2 Support 7. 保存

几秒钟后证书就下来了,`https://video.example.com` 可以直接访问。

两个开关要注意:

  • Websockets Support:很多服务(尤其是实时通信类)必须开,否则会出现能打开页面但功能不正常
  • Block Common Exploits:建议开,能挡掉一批常见的恶意请求

证书申请失败的三个常见原因

这是 NPM 最容易卡住的地方,按概率排序:

一、80 端口没通。 Let’s Encrypt 的 HTTP 校验需要外网能访问你的 80 端口。如果你在路由器上没做端口转发,或者运营商封了 80,HTTP 校验就会失败。解决办法是改用 DNS 校验(需要你的域名服务商支持 API),或者换端口方案。

二、域名没解析到正确 IP。 家里宽带是动态 IP 的话,需要配合 DDNS,并且确认解析已经生效。

三、防火墙挡了。 NAS 自己、路由器、运营商这三层的防火墙都可能是原因,逐层排查。

安全和隐私上的三条建议

别把所有服务都暴露到公网。 NPM 让暴露变容易了,但容易不等于应该。只把你确实需要远程访问的服务加进去,其余的留在内网。

管理后台(81 端口)不要对外暴露。 它是整个代理的控制面板,只应该在内网访问。

善用 Access List。 NPM 支持给代理规则加访问控制,可以按 IP 段限制,也可以加一层基础认证。给敏感服务加一道,成本很低。

它不解决什么

说清楚边界,免得你有错误预期:

  • 它不做内网 DNS。域名解析要靠你自己的 DDNS 或内网 DNS 服务
  • 它不等于安全。加了 HTTPS 只是加密了传输,服务本身的弱密码问题它管不了
  • 它不能穿透没有公网的环境。如果你家没有公网 IP,需要先解决穿透问题(内网穿透或异地组网),NPM 只负责入口那一层

小结

如果你在 NAS 上跑的服务超过三个,NPM 基本是必装的。它把”一堆记不住的 IP 加端口”变成”一批能记住的域名 + 全面的 HTTPS”,而且维护成本极低——证书到期自动续,你装好之后基本可以忘掉它。

微信搜一搜 纳思Note
评论经后台审核通过后显示 · 请勿发布广告、外链或无关内容

发表评论

邮箱地址不会被公开。填写昵称与邮箱后方可评论。