问题
使用“transfer-encoding: chunked”下载大型文件(400MB 以上)大约 3 秒后就会失败。下载较小的文件即使可能需要超过 3 秒也能正常工作。连接在传输过程中中断,导致由于预期内容丢失而导致读取不完整。下载相同文件或类似大小的文件可能会持续几个小时,然后持续几个小时或几天失败。
设置
- 在 kubernetes 集群内部以代理模式进入 Nginx。
- 在 AWS 上运行
笔记
当通过端口转发到发送响应的实际服务器来绕过 nginx 时,下载始终有效。ingress/nginx pod 不会失败和重新启动。日志中未发现任何错误。配置选项似乎proxy-buffering
没有什么区别。有时有效,有时无效。
知道什么可能导致此行为吗?很高兴提供更多详细信息。谢谢。
有关的
这两个问题看起来非常相似:
答案1
您的 nginx pod 是否显示大量重启?可能是因为下载量过大导致 nginx 的存活探测超时,并最终被 Kubernetes 终止。
如果是这种情况,您可以增加活动性探测超时。我最近发现一个问题,即使服务没有特别努力,活动性探测也会超时,这可能与 Go 代码中探测器的创建方式有关。
答案2
在我们的案例中,它是 AWS经典的负载平衡器导致大容量下载出现问题。请参阅此链接查看亚马逊的声明。自从切换到网络负载均衡器问题已消失。