Web Station 建站与反向代理

套件在干什么

Web Station 是群晖的 Web 服务器套件:装上之后 NAS 就能托管网站,支持 Apache、Nginx 和 PHP,配合 MariaDB 数据库套件可以跑完整的动态站点。除了建站,它还有一个更常用的隐藏角色——所有 Web 套件和网页服务背后的底座。理解反向代理之前的铺垫是:DSM 自己的网页服务、各套件的网页入口,都是同一套 Web 技术实现的。

反向代理(reverse proxy)是本篇真正的主角。普通端口转发是把外网端口一对一地打到内网服务上,反代则是「一个域名入口分发到多个内部服务」:浏览器请求 https://app1.你的域名,反代服务器根据域名把它转发到 NAS 本地的 8096 端口;请求 https://app2.你的域名 转发到另一个端口。对外只露一个 443,对内想挂多少服务都行。

反代的好处一箭三雕:统一 HTTPS 证书、统一端口入口、统一访问控制。家用场景里它把「NAS 服务的访问体验」从地下车库拉到写字楼大堂。网络概念不太熟的可以先补 DNS 和端口的基础,参考 计算机网络基础。

Web Station 建一个静态站

先把 Web Station 本职工作跑通。套件中心安装 Web Station 和 PHP(依需版本),它会自动建一个 web 共享文件夹。把静态网页(HTML 一类的文件)丢进 web 目录,浏览器访问 NAS的IP/文件夹名 就能看到。这就是一台完整功能的 Web 服务器,连数据库都不用。个人作品集、家庭公告页、工具书签页,几个 HTML 文件的事,零成本上线。

默认虚拟主机设置里能调 PHP 版本和默认文档(index.html 的优先级)。虚拟主机(Virtual Host)是 Web Station 的进阶能力:给站点绑定域名、指定根目录。一个 NAS 能同时挂多个站点,各自独立根目录、独立 PHP 配置。配合反代对外映射,每个站点有自己的访问入口。

组件 套件 用途
Web 服务器 Web Station 内置 Nginx 或 Apache 托管网页
PHP PHP 套件 动态站点
数据库 MariaDB 10 数据库类应用
phpMyAdmin 套件 数据库管理

想跑博客(WordPress 一类)的话:建 MariaDB 数据库和用户、WordPress 文件解压到 web/wordpress、跑安装向导。数据库的密码和库名在 MariaDB 套件里建,记好笔记,安装向导要填。这套流程能把 NAS 变成小型博客主机,配合反代加证书还能发布到公网。个人博客是 NAS 玩家最常见的建站练手项目,整个流程半小时走完,维护成本低,内容完全自主。

注意套件版本和 PHP 版本的匹配:不同应用要的 PHP 版本不同,Web Station 里能给每个站点单独指定 PHP 版本。装好之后站点列表会列出全部站点,指定根目录和 PHP 配置一目了然。

反向代理的配置

真正的重头戏在控制面板里:登录门户、高级、反向代理服务器。点新增填一条规则,就能把一个域名入口转到任意端口上。一套家用反代系统通常建三四条规则:DSM 界面留给内网不建规则,影音、下载、笔记各一条,每条规则的来源主机名就是各自的子域名。

字段 填法 示例
来源协议 客户端用什么访问 HTTPS
来源主机名 解析到 NAS 的域名 jellyfin.你的域名
来源端口 对外暴露端口 443
目的地协议 内部服务协议 HTTP
目的地主机名 服务跑在哪 localhost 或容器 IP
目的地端口 内部服务端口 8096

启用 HSTS 强制 HTTPS,启用访问控制可以按 IP 段限制来源。规则建好之后,路由器只需要把 443 转发到 NAS,所有服务共用这一个入口。每条规则对应一个子域名,DNS 里把每个子域名都解析到公网 IP(或者泛解析一次解决)。泛解析(星号记录指向公网 IP)加一条就能用任意子域名,最省事;谨慎起见的同学逐条解析也行,规矩但啰嗦。子域名命名建议成体系(media、dl、note 一眼可辨),半年后加新服务也不会撞名。

容器服务挂反代时,目的地主机名有个讲究:容器用 host 网络或者端口映射到本地,填 localhost 没问题;容器跑在自定义网桥上,填容器 IP 会更直接,但容器重建 IP 会变,稳妥的做法是给容器固定 IP 或者用本地映射端口。WebSocket 类应用(比如面板类工具)要在自定义规则里加上 Upgrade 头的支持,否则实时刷新的功能会失灵,这是反代最常见的玄学故障。

一条反代规则的请求走向

证书:Let‘s Encrypt 免费方案

反代配 HTTPS 必须要证书,DSM 内置了 Let‘s Encrypt 免费证书申请。控制面板、安全性、证书、新增,选「从 Let‘s Encrypt 获取证书」,填域名和邮箱,前提是域名已经解析到你的公网 IP 且 80 端口能从外面访问(验证要走 80 端口)。几分钟之后证书就下发到证书列表,绑定到对应反代规则的来源主机名即可。

获取方式 成本 有效期 续期
Let‘s Encrypt 免费 三个月 自动
自签名 免费 自定 手工换发
商业证书 付费 一到两年 手动

申请前检查三件事:DNS 解析已生效、80 端口在防火墙放行、DSM 页面(HTTP 端口)能正常打开。验证失败十有八九是这三环之一。Let‘s Encrypt 三个月一换,续期由 DSM 自动处理,快到期的前几天通知中心会提醒续期结果,留意一下。

有泛域名需求的可以申请通配证书,DSM 的 ACME 界面对泛域名验证(DNS 验证)支持有限,用脚本工具(acme.sh 一类)配合计划任务也能完成,这就属于进阶玩家自己琢磨的范畴了。

这套架构的日常维护

反代加证书跑起来之后,日常维护做四件事:证书到期前看通知、DSM 更新后检查反代规则还在、新加服务先内网测通再挂反代、访问日志定期看一眼。反代规则在 DSM 大版本更新时偶尔会出兼容问题,升级前截图存一份规则列表,出问题能照着重建。

安全方面,反代统一入口之后攻击面集中在一个 443 上,这个端口的防护标准要拉高:强密码、两步验证、登录失败锁定。反代的访问控制规则建议默认拒绝,只放行已知 IP 段,比裸奔安全得多。DSM 管理界面绝不要走公网反代,影音和工具类服务足够了。

Web服务分层

什么服务适合挂到反代后面

反代虽好,不是所有服务都该挂上去。适合挂的是这两类:有完整登录认证体系的 Web 应用(影音、下载、笔记的面板)、纯静态内容(个人博客、导航页)。不适合挂的是两类:DSM 管理界面本身(把它暴露到公网等于把家门钥匙挂门外)、没有认证机制的工具面板(监控、数据库管理这类,谁打开都能操作)。

没有认证的服务又想外网用,标准的替代方案是走 VPN 而不是开反代:整个人连进内网再访问,安全性高一个量级。实在想挂的最低限度补救:反代规则里开访问控制、只放行自己的 IP 段,或者在服务前面加一层网关认证。这些权衡以后在安全章节展开。

挂反代的服务还有一处要注意:部分应用里写的内部跳转链接会带端口号,经过反代之后端口号错位。应用有「反向代理」或者「外部地址」设置项的,填上反代域名,应用生成的链接就都是正确的域名形式。Jellyfin 的 JELLYFIN_PublishedServerUrl 就是干这个的。

日志与排错

反代出问题排噪顺序:先换浏览器隐身模式排除缓存;再看证书是否有效(地址栏小锁有没有感叹号);然后看规则目的地端口通不通(内网直接访问服务 IP 加端口验证);最后看服务本身有没有启动。四步走完,95% 的反代故障都能定位。

DSM 自己不直接给反代访问日志,想看请求记录的可以在日志中心里翻相关条目,关键字搜「反向代理」。高级玩家也可以在容器里跑一个独立的反代(Nginx 一类)代替 DSM 内置方案,请求日志和自定义头都自由,代价是证书要自己配。两条路各有受众,家用体量内置方案完全够。把反代的来源、域名、目的地端口写成一张表贴在配置旁边,半年后回头改规则就不用重新推理。

延伸阅读