Skip to content

用阿里云 ESA 给 fknock 做加速与回源

先说结论

如果你还没最终选型,我更推荐你优先改走:

原因不是 ESA 不能做,而是对 fknock / 飞牛这种场景来说,EdgeOne 的上手路径通常更顺。

尤其要注意一点:

  • 阿里云 ESA 官方文档写得很明确,免费版套餐不支持开启 WebSocket

而飞牛与 fknock 这类场景,恰恰很依赖 WebSocket 相关能力。

所以如果你现在只是想低成本、少踩坑地跑通整条链路,优先选 EdgeOne 往往更省事。

这篇教程适合谁

这篇教程更适合下面这类用户:

  • 你已经在用阿里云 ESA
  • 或你明确希望域名和加速体系继续留在阿里云
  • 你已经接受这条路线更偏“已有阿里云体系下的接入教程”

先记住 6 个关键点

  1. ESA 前面接住的是标准 80 / 443,但回到 fknock 的端口仍然要自定义成 7999
  2. fknock 的 子域映射 里要开启 阿里云ESA / 腾讯云Edge One支持
  3. ESA 里要开启“托管转换”中的“添加真实客户端 IP 标头”
  4. 缓存建议先关闭
  5. WebSocket 要确认已开启;如果你的套餐不支持,就不建议继续这条路线
  6. IPv6 建议先关闭,减少双栈问题

第 1 步:先把 fknock 准备好

路径:

  • 系统设置 → 模式
  • 子域映射

至少先确认这些内容已经完成:

  1. 已切换到 子域模式
  2. 已创建鉴权服务,例如 auth.example.com
  3. 已创建业务子域,例如 alist.example.comfnos.example.com
  4. 本机访问 fknock 的 7999 已经是通的

还要再补一个动作:

  • 子域映射 → 子域模式配置 里开启 阿里云ESA / 腾讯云Edge One支持

第 2 步:在 ESA 中接入站点

通常你会在 ESA 里完成:

  • 站点接入
  • 域名接入
  • 加速域名配置

如果你的目标就是把这几个子域接到 fknock 前面,最常见的目标会是:

  • auth.example.com
  • alist.example.com
  • fnos.example.com

第 3 步:回源端口手动改成 7999

这一点和 EdgeOne 一样重要。

在 ESA 的回源配置里,核心思路仍然是:

  1. 源站地址填你的公网 IP、DDNS 域名,或当前稳定可达的公网入口
  2. 回源协议按 fknock 当前 7999 的真实情况来选
  3. 回源端口手动改成 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.com
  • alist.example.com
  • fnos.example.com

先都不缓存。

第 6 步:确认 WebSocket 能用

ESA 官方文档把 WebSocket 放在网络优化里单独说明了。

这里要特别注意两件事:

  1. fknock / 飞牛场景建议把它保持开启
  2. ESA 免费版套餐不支持开启这个功能

所以如果你当前用的是免费版,或者你所在套餐实际上没法稳定提供 WebSocket,那么这条路线就不适合作为飞牛主入口。

这也是为什么前面我会更推荐:

  • EdgeOne

第 7 步:IPv6 先关掉

ESA 官方文档同样支持单独开启 IPv6 访问。

但对家宽、DDNS 和双栈接入来说,我更建议第一次部署时先把它关掉。

这样做不是因为 ESA 不支持 IPv6,而是因为在这类场景里,双栈问题往往最难排查。

更常见的现象是:

  • 某些网络环境正常
  • 某些网络环境异常
  • 同一个域名在不同客户端表现不一致

所以更稳妥的做法通常是:

  1. 先只跑通 IPv4
  2. 确认回源、缓存、WebSocket 都正常
  3. 最后再做单独的 IPv6 验证

第 8 步:最终验证顺序

推荐按这个顺序测:

  1. 外部网络访问 https://auth.example.com
  2. 确认登录页正常
  3. 登录后再访问 https://alist.example.com
  4. 再测试 https://fnos.example.com
  5. 最后再验证飞牛 App 或网页实时功能

如果这里遇到“网页能开,但飞牛还是不稳定”,优先回头检查:

  1. WebSocket 是否真的可用
  2. 缓存是否已经关闭
  3. IPv6 是否已经关闭
  4. 真实客户端 IP 标头是否已经开启

最常见的 5 个坑

1. 把对外 443 当成回源端口

真正回到 fknock 时,最关键的仍然是:

  • 7999

2. 忘了开 阿里云ESA / 腾讯云Edge One支持

这会让子域模式里的公开鉴权地址仍然沿用旧的裸端口心智。

3. 忘了开真实客户端 IP 标头

这会让来源 IP 的判断更不可靠。

4. 缓存没关

这会让鉴权和页面状态最容易出现“看起来像没生效”的假象。

5. 套餐不支持 WebSocket

如果这里过不去,就不要继续硬拧 ESA 这条路线了,直接改走 EdgeOne 往往更省事。

这篇教程的标准完成状态

做到下面这些,基本就算跑通了:

  1. 最终用户访问时不再显式写 :7999
  2. ESA 回源端口已改成 7999
  3. 阿里云ESA / 腾讯云Edge One支持 已开启
  4. 真实客户端 IP 标头已开启
  5. 缓存已关闭
  6. WebSocket 已确认可用
  7. IPv6 已先关闭

官方资料

更推荐的替代路线

QQ群:1081609274