

TL;DR
- 前提是 NAS 有公网 IP。在 EdgeOne 中把一个独立分享域名回源到飞牛 NAS,对外只分享这个 CDN 域名,不暴露源站地址。
- 在“站点加速 → 规则引擎”中新建子规则,条件填“${http.request.host} in ['你的分享域名'] and not lower(${http.request.uri.path}) in ['/s/*']”,动作选择 302 URL 重定向并指向任意安全页面。
- 保存后验证:https://分享域名/s/分享ID 应正常打开,/s 之外的后台、登录等路径应全部被重定向。EdgeOne 免费版 WAF 无法按路径拦截,所以要用规则引擎实现。
前言#
最近在使用飞牛 NAS 时,我遇到了一些与公开分享链接有关的问题:如果直接把公网访问地址分享出去,对方不仅能打开分享页面,还可能访问同一地址下的其他 NAS 页面 (例如后台管理)。路径隔离没做好,甚至会把整个 NAS 管理入口暴露到公网。
当然,也可以使用自带的 FN Connect,但它的带宽实在不够看。即使付费扩容,也达不到我现有公网线路的 100Mbps 上行带宽。
于是,我把目光投向了 EdgeOne。在配置过程中遇到了几个小问题,便写下这篇文章,记录一下自己的解决方案。
解决思路#
源站隐藏#
这一点没什么好展开的。让访问流量经过 CDN,通常就能起到隐藏源站地址的作用。不过,域名需要完成备案后才能使用国内节点。
仅允许访问分享页面#
先创建一个公开分享链接:
https://public-nas.mic.run/s/6c5229a34c164f1ba6txt不难看出,飞牛 NAS 的分享链接使用 /s/xxxxxxxxxxxxxx 这种路径格式。
按照最初的设想,只要写一条安全规则,拦截所有不符合 /s/* 格式的请求就可以了。
好吧,并不行。EdgeOne 免费版的安全规则不支持使用路径匹配来拦截请求。

但这怎么能够拦住我呢?翻找一下页面,我发现了 站点加速 - 规则引擎 这个玩意。
规则引擎虽然不能直接拦截请求,却可以执行重定向。然后我就把所有非分享路径都重定向到了原神官网。

下面是完整的规则 JSON,其中还包含了我自己添加的缓存配置,有需要可以直接取用。
{
"FormatVersion": "1.0",
"Rules": [
{
"RuleName": "外部NAS大文件下载",
"Branches": [
{
"Condition": "${http.request.host} in ['public-nas.mic.run']",
"Actions": [
{
"Name": "Cache",
"CacheParameters": {
"CustomTime": {
"Switch": "on",
"IgnoreCacheControl": "on",
"CacheTime": 2592000
}
}
},
{
"Name": "CacheKey",
"CacheKeyParameters": {
"QueryString": {
"Switch": "off",
"Values": []
},
"FullURLCache": "off"
}
},
{
"Name": "RangeOriginPull",
"RangeOriginPullParameters": {
"Switch": "on"
}
}
],
"SubRules": [
{
"Branches": [
{
"Condition": "${http.request.host} in ['public-nas.mic.run'] and not lower(${http.request.uri.path}) in ['/s/*']",
"Actions": [
{
"Name": "AccessURLRedirect",
"AccessURLRedirectParameters": {
"StatusCode": 302,
"Protocol": "follow",
"HostName": {
"Action": "custom",
"Value": "ys.mihoyo.com"
},
"URLPath": {
"Action": "custom",
"Value": "/"
},
"QueryString": {
"Action": "ignore"
}
}
}
]
}
],
"Description": ["请求非分享路径自动跳转原神"]
}
]
}
],
"Description": []
}
]
}json效果验证#
配置完成后,访问下面的分享链接,可以正常打开页面并播放视频:
https://public-nas.mic.run/s/6c5229a34c164f1ba6 ↗
当你尝试访问 /s 以外的路径时,请求会被重定向到 原神官网 ↗。这样既保留了公开分享功能,也避免了其他 NAS 页面直接暴露在同一个公网地址下。