用阿里云 ESA 给 fknock 做加速与回源
先说结论
如果你还没最终选型,我更推荐你优先改走:
原因不是 ESA 不能做,而是对 fknock / 飞牛这种场景来说,EdgeOne 的上手路径通常更顺。
尤其要注意一点:
- 阿里云 ESA 官方文档写得很明确,免费版套餐不支持开启 WebSocket
而飞牛与 fknock 这类场景,恰恰很依赖 WebSocket 相关能力。
所以如果你现在只是想低成本、少踩坑地跑通整条链路,优先选 EdgeOne 往往更省事。
这篇教程适合谁
这篇教程更适合下面这类用户:
- 你已经在用阿里云 ESA
- 或你明确希望域名和加速体系继续留在阿里云
- 你已经接受这条路线更偏“已有阿里云体系下的接入教程”
先记住 6 个关键点
- ESA 前面接住的是标准
80 / 443,但回到 fknock 的端口仍然要自定义成7999 - fknock 的
子域映射里要开启阿里云ESA / 腾讯云Edge One支持 - ESA 里要开启“托管转换”中的“添加真实客户端 IP 标头”
- 缓存建议先关闭
- WebSocket 要确认已开启;如果你的套餐不支持,就不建议继续这条路线
- IPv6 建议先关闭,减少双栈问题
第 1 步:先把 fknock 准备好
路径:
系统设置 → 模式子域映射
至少先确认这些内容已经完成:
- 已切换到
子域模式 - 已创建鉴权服务,例如
auth.example.com - 已创建业务子域,例如
alist.example.com、fnos.example.com - 本机访问 fknock 的
7999已经是通的
还要再补一个动作:
- 在
子域映射 → 子域模式配置里开启阿里云ESA / 腾讯云Edge One支持
第 2 步:在 ESA 中接入站点
通常你会在 ESA 里完成:
- 站点接入
- 域名接入
- 加速域名配置
如果你的目标就是把这几个子域接到 fknock 前面,最常见的目标会是:
auth.example.comalist.example.comfnos.example.com
第 3 步:回源端口手动改成 7999
这一点和 EdgeOne 一样重要。
在 ESA 的回源配置里,核心思路仍然是:
- 源站地址填你的公网 IP、DDNS 域名,或当前稳定可达的公网入口
- 回源协议按 fknock 当前
7999的真实情况来选 - 回源端口手动改成
7999
回源协议通常这样判断:
- fknock 的
7999已经启用 HTTPS:选HTTPS - fknock 的
7999还没启用 HTTPS:选HTTP
不要把对外暴露的 443 和实际回源的 7999 混为一谈。
第 4 步:打开真实客户端 IP 标头
这是 ESA 这条路线里最容易漏的一步。
如果你要把 ESA 放在子域模式前面,请确保 ESA 站点里已经开启:
托管转换中的添加真实客户端 IP 标头
这样做的意义是:
- fknock 才能更可靠地拿到最终访客的真实来源 IP
否则你在后台里看到的很多来源信息,就可能更偏向 ESA 节点本身。
第 5 步:缓存先关掉
ESA 具备缓存与加速能力,但对 fknock 这种动态鉴权入口,第一次部署时更稳妥的思路仍然是:
- 先全部不缓存
最常见的副作用和 EdgeOne 一样:
- 登录态看起来不一致
- 刚退出仍像没退出
- 重定向结果被旧缓存干扰
- 飞牛页面表现异常
建议先对这些子域全部采用最保守的策略:
auth.example.comalist.example.comfnos.example.com
先都不缓存。
第 6 步:确认 WebSocket 能用
ESA 官方文档把 WebSocket 放在网络优化里单独说明了。
这里要特别注意两件事:
- fknock / 飞牛场景建议把它保持开启
- ESA 免费版套餐不支持开启这个功能
所以如果你当前用的是免费版,或者你所在套餐实际上没法稳定提供 WebSocket,那么这条路线就不适合作为飞牛主入口。
这也是为什么前面我会更推荐:
- EdgeOne
第 7 步:IPv6 先关掉
ESA 官方文档同样支持单独开启 IPv6 访问。
但对家宽、DDNS 和双栈接入来说,我更建议第一次部署时先把它关掉。
这样做不是因为 ESA 不支持 IPv6,而是因为在这类场景里,双栈问题往往最难排查。
更常见的现象是:
- 某些网络环境正常
- 某些网络环境异常
- 同一个域名在不同客户端表现不一致
所以更稳妥的做法通常是:
- 先只跑通 IPv4
- 确认回源、缓存、WebSocket 都正常
- 最后再做单独的 IPv6 验证
第 8 步:最终验证顺序
推荐按这个顺序测:
- 外部网络访问
https://auth.example.com - 确认登录页正常
- 登录后再访问
https://alist.example.com - 再测试
https://fnos.example.com - 最后再验证飞牛 App 或网页实时功能
如果这里遇到“网页能开,但飞牛还是不稳定”,优先回头检查:
- WebSocket 是否真的可用
- 缓存是否已经关闭
- IPv6 是否已经关闭
- 真实客户端 IP 标头是否已经开启
最常见的 5 个坑
1. 把对外 443 当成回源端口
真正回到 fknock 时,最关键的仍然是:
7999
2. 忘了开 阿里云ESA / 腾讯云Edge One支持
这会让子域模式里的公开鉴权地址仍然沿用旧的裸端口心智。
3. 忘了开真实客户端 IP 标头
这会让来源 IP 的判断更不可靠。
4. 缓存没关
这会让鉴权和页面状态最容易出现“看起来像没生效”的假象。
5. 套餐不支持 WebSocket
如果这里过不去,就不要继续硬拧 ESA 这条路线了,直接改走 EdgeOne 往往更省事。
这篇教程的标准完成状态
做到下面这些,基本就算跑通了:
- 最终用户访问时不再显式写
:7999 - ESA 回源端口已改成
7999 阿里云ESA / 腾讯云Edge One支持已开启- 真实客户端 IP 标头已开启
- 缓存已关闭
- WebSocket 已确认可用
- IPv6 已先关闭
