Nginx 代理大文件下载有时会立即失败

Nginx 代理大文件下载有时会立即失败

问题

使用“transfer-encoding: chunked”下载大型文件(400MB 以上)大约 3 秒后就会失败。下载较小的文件即使可能需要超过 3 秒也能正常工作。连接在传输过程中中断,导致由于预期内容丢失而导致读取不完整。下载相同文件或类似大小的文件可能会持续几个小时,然后持续几个小时或几天失败。

设置

  • 在 kubernetes 集群内部以代理模式进入 Nginx。
  • 在 AWS 上运行

笔记

当通过端口转发到发送响应的实际服务器来绕过 nginx 时,下载始终有效。ingress/nginx pod 不会失败和重新启动。日志中未发现任何错误。配置选项似乎proxy-buffering没有什么区别。有时有效,有时无效。

知道什么可能导致此行为吗?很高兴提供更多详细信息。谢谢。

有关的

这两个问题看起来非常相似:

答案1

您的 nginx pod 是否显示大量重启?可能是因为下载量过大导致 nginx 的存活探测超时,并最终被 Kubernetes 终止。

如果是这种情况,您可以增加活动性探测超时。我最近发现一个问题,即使服务没有特别努力,活动性探测也会超时,这可能与 Go 代码中探测器的创建方式有关。

答案2

在我们的案例中,它是 AWS经典的负载平衡器导致大容量下载出现问题。请参阅此链接查看亚马逊的声明。自从切换到网络负载均衡器问题已消失。

https://repost.aws/questions/QUXFiHUoT_RLaxa3DuiNvDHA/classic-load-balancer-terminates-large-downloads-mid-request

相关内容