Onebox 无法处理大于 5MB 的视频:服务器返回 200 OK 而非 206 Partial Content

大家好,

我遇到了一个特定问题:我的 Discourse 实例(标准的 Docker 安装)上,大于 5MB 的视频无法生成 Onebox 预览,而相同的视频链接在其他 Discourse 站点上工作得非常完美。

问题:
当我发布一个视频链接(例如一个 5.1MB 的 .webm 文件)时,Onebox 失败了。我已经将问题隔离到 Range 请求协商失败。

从 Rails 控制台得到的调试结果:

  • 手动 Ruby 测试(成功): 使用标准的 Net::HTTP 并手动设置 Range: bytes=0-10 标头,我成功地从源服务器获得了 206 Partial Content 响应。
  • Discourse 系统测试(失败): 当 Discourse 尝试通过 FinalDestination.new(url).get 获取同一 URL 时,它收到了 200 OK (Net::HTTPOK) 响应,而不是 206。因此,它尝试下载整个文件,达到了 5MB 的 MAX_REQUEST_SIZE_BYTES 限制,Onebox 以“大小超出限制”错误失败。

我已经测试了以下配置,但问题仍然存在:

  1. onebox_user_agent 中设置了类似浏览器的字符串。
  2. 将源域添加到 force_custom_user_agent_hosts
  3. 验证服务器没有配置全局代理(env | grep -i proxy 为空)。
  4. 在其他 Discourse 实例上测试了相同的 URL,它们可以完美地 Onebox。

问题:
为什么一个 Discourse 实例无法协商 Range 请求(206),而指向完全相同 URL 的另一个实例在同一网络上却能成功?

是否有任何特定的内部配置、安全中间件或 FinalDestination 逻辑可能会剥离 Range 标头或导致远程服务器回退到完整的 200 响应?

非常感谢任何见解或下一步的查找方向!