3

我们最近从 nginx 入口控制器从 0.8.2 升级到 0.11.0,并且在上传大约 10 MB 或更高的大文件时开始出现 502 bad gateway 错误,我们通过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, like Gecko) Chrome/65.0.3325.181 Safari/537.36" 3371263 10.850 [uploader-443] ----

[警告] 30684#30684: *42090 客户端请求正文缓冲到临时文件 /var/lib/nginx/body/0000000482,客户端:已编辑,服务器:已编辑,请求:“POST /redacted/upload HTTP/1.1” ,主持人:“已编辑”,推荐人:“ https://redacted/

代理服务器是 tomcat,请求不会发送到 tomcat。我们尝试增加:

  • 超时
  • 代理缓冲区
  • proxy_buffer_size

但没有任何效果。

回到0.8.2版本解决了这个问题。

更新 1:nginx.conf 片段

位置/已编辑/ {

port_in_redirect 关闭;

设置 $proxy_upstream_name "redacted-443";

……

……

client_max_body_size "500m";

4

5 回答 5

4

看起来您可能需要为所有 Ingress 规则全局设置更大的文件大小。

这可以通过使用proxy-body-size参数来实现,即:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 20mb
.... 

之后它应该适用于大于 10MB 的文件。

于 2018-03-27T09:06:30.877 回答
1

我建议使用 configmap 设置:

  body-size: "1024m"
  proxy-body-size: "1024m"

这是一个完整的例子:https ://github.com/mateothegreat/k8-byexamples-ingress-controller/blob/master/manifests/configmap.yaml

要将配置映射应用于入口控制器部署,您需要将其作为参数传递给容器,例如:https ://github.com/mateothegreat/k8-byexamples-ingress-controller/blob/master/manifests/控制器部署.yaml#L59

于 2019-01-26T08:45:06.327 回答
1

您是否验证了生成的 nginx.conf 以查看该值是否实际设置?我在入口配置本身中使用了它并且它可以工作(版本 0.11 也是如此)

于 2018-03-27T04:59:27.663 回答
0

我面临着同样的问题。在我们的例子中,它是一个使用 uwsgi 运行的 python Django 应用程序,并将 Nginx 设置为入口控制器。当上传大于 50mb 的文件时,我会得到 502,尽管我已将所有配置添加到入口控制器配置映射。原来问题出在吊舱的活跃度探测器上。当一个大文件被发送到作为单线程运行的 uwsgi 服务器的应用程序时,忙于该请求并且活动性检查超时。因此 pod 重新启动。我通过从部署中删除活力检查来测试这一点,并且文件上传没有任何问题。

于 2021-02-09T13:49:44.233 回答
0

我有同样的问题

首先,我得到了413,通过添加解决了

nginx.ingress.kubernetes.io/proxy-body-size: "10m"

后来服务开始提供502。当查看 pod 时,上传文件时 pod 被 OOMKilled。所以我们需要增加容器的资源限制。

 containers:
    - name: test-service
      image: test-service:develop
      imagePullPolicy: Always
      resources:
        requests:
          memory: 256Mi
        limits:
          memory: 512Mi
于 2021-12-22T11:08:43.177 回答