设置(请求如何路由)

设置(请求如何路由)

我在 DigitalOcean Kubernetes 集群上运行 NextCloud 15。当我下载大型(>1GB)文件时,出现错误。我似乎已将问题缩小到 nginx,我想知道如何修复它。详情如下:

设置(请求如何路由)

  • DigitalOcean 负载均衡器
  • nginx 服务(Kubernetes 负载均衡器)
  • ingress-nginx pods(3)正在执行 TLS 终止/反向代理
  • nextcloud 服务(Kubernetes 服务)
  • nextcloud pod

会发生什么:

curl -u [redacted] https://[redacted]/[path to large file] 最终,在成功读取了几百 MB 之后,我得到了以下内容curl

curl: (56) GnuTLS recv error (-9): A TLS packet with unexpected length was received.

如果我设置kubectl port-forwardNextCloud 服务或 pod,并指向curl它,则下载成功。没有导致上游超时的停顿。所以这不是 NextCloud 或其服务的问题。

如果我设置了kubectl port-forwardnginx 服务或 pod,并指向curl它,我会得到与指向 DigitalOcean LoadBalancer ( A TLS packet with unexpected length was received.) 相同的结果。因此,很可能是 nginx 导致了这个问题。

配置

nginx 运行的是 TLSv1.2,在 SSLLabs 的运行中没有什么异常。它的版本是 nginx/1.15.6。我已proxy-buffering通过入口注释关闭并验证它已更新该虚拟主机的nginx.confwith。nginxproxy_buffering off;日志中没有错误。每次运行所用时间和下载的数据量都不同。

我在网上看到一些关于 nginx 在使用 HTTP/2 时出现问题的讨论,所以我使用 HTTP/1.1 重新尝试了这些测试。结果相同。较小的文件和 Web UI 工作正常,但通过curl、Web UI 或 nextcloud 客户端下载大文件时会崩溃。

nginx 是否存在一些已知问题?同样的系统曾经与 Docker 上的 Apache 一起工作,只有当我迁移到 Kubernetes 上的 nginx 时才会出现。

答案1

我将nginx-ingress-controller部署升级到quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.22.0,其中包括 nginx/1.15.8,问题就消失了。请参阅更新日志了解具体情况。

相关内容