我们最近从nginx入口控制器从0.8.2升级到0.11.0,并开始收到502错误的网关错误 对于大约10 MB或更高的大型文件上传,我们在configmap中通过 proxy-body-size 将 client_max_body_size 设置为 500m 并且验证 它的集合。 5-6 MB左右的较小文件工作正常。
日志中没有错误,只有这些消息。
编辑 - [编辑] - - [25 / Mar / 2018:02:08:49 +0000]“POST / redacted / upload HTTP / 1.1“000 0”https://redacted/“”Mozilla / 5.0 (Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样) Chrome / 65.0.3325.181 Safari / 537.36“3371263 10.850 [uploader-443] ----
和
[warn] 30684#30684:* 42090客户端请求正文被缓冲到 临时文件/ var / lib / nginx / body / 0000000482,客户端:编辑, server:redacted,request:“POST / redacted / upload HTTP / 1.1”,host: “编辑”,推荐人:“https://redacted/”
代理服务器是tomcat,请求不会进入tomcat。 我们尝试过增加:
但没有任何效果。
返回 0.8.2 版本可解决此问题。
更新1:nginx.conf片段
location / redacted / {
port_in_redirect off;
设置$ proxy_upstream_name“redacted-443”;
...
...
client_max_body_size“500m”;
答案 0 :(得分:2)
看起来您可能需要为所有Ingress规则全局设置更大的文件大小。
这可以通过使用 proxy-body-size 参数来实现,即:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/proxy-body-size: 20mb
....
之后它适用于大于10MB的文件。
答案 1 :(得分:1)
您是否验证了生成的nginx.conf以查看该值是否已实际设置?我在入口配置中使用了它并且它可以工作(版本0.11)
答案 2 :(得分:1)
我建议使用configmap设置:
body-size: "1024m"
proxy-body-size: "1024m"
要将配置映射应用于入口控制器部署,您需要将其作为参数传递给容器,例如:https://github.com/mateothegreat/k8-byexamples-ingress-controller/blob/master/manifests/controller-deployment.yaml#L59
答案 3 :(得分:0)
我遇到了同样的问题。在我们的例子中,它是一个使用 uwsgi 运行的 python Django 应用程序,Nginx 设置作为入口控制器。当上传大于 50mb 的文件时,我会得到 502,尽管我已将所有配置添加到入口控制器配置映射中。 事实证明,问题出在 pod 的活跃度探测器上。当一个大文件被发送到作为单线程运行的 uwsgi 服务器的应用程序时,会忙于该请求并且活动检查超时。因此 pod 会重新启动。我通过从部署中删除活跃度检查来对此进行测试,并且文件上传没有任何问题。