我正在尝试更改client_max_body_size
值,这样NGINX入口就不会返回HTTP 413 Content Too Large错误(如日志中所示)。
我试过几种解决方案。
以下是我的配置图:
kind: ConfigMap
apiVersion: v1
data:
proxy-connect-timeout: "15"
proxy-read-timeout: "600"
proxy-send-timeout: "600"
proxy-body-size: "8m"
hsts-include-subdomains: "false"
body-size: "64m"
server-name-hash-bucket-size: "256"
client-max-body-size: "50m"
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app: ingress-nginx
这些变化根本没有影响:在NGINX控制器的日志中,我可以看到有关重新加载配置图的信息,但nginx.conf
中的值是相同的:
$ cat /etc/nginx/nginx.conf | grep client_max
client_max_body_size "8m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
client_max_body_size "1m";
我的nginx-controller
配置使用此映像:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.13.0
我怎样才能强迫NGINX改变这个设置呢?我需要全局地改变它,对于我所有的入口。
8条答案
按热度按时间bmvo0sr51#
您可以使用注解
nginx.ingress.kubernetes.io/proxy-body-size
在Ingress对象中设置max-body-size选项,而不是更改基本ConfigMap。下面是用法示例:
sxissh062#
要全局设置它,configmap.md文档可能会有帮助,因为要设置的变量是
proxy-body-size
,而不是client-max-body-size
。当您部署舵图时,您可以设置
--set-string controller.config.proxy-body-size="4m"
。zphenhs43#
这里对于正确的注解是
nginx.ingress.kubernetes.io/proxy-body-size
还是nginx.org/client-max-body-size
存在混淆,答案是可能是其中之一!在所有参与者不容置疑的智慧中,世界上有两种不同的“NGINX入口”。很难分辨你在运行哪一种,而谷歌搜索在区分这一点上毫无用处(但有什么新的)。
如果您使用的是官方NGINX入口,正确的注解如下:https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/
如果您使用的是基于NGINX的官方Kubernetes入口,正确的注解如下:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-max-body-size
如果入口实现的Docker镜像名称是
k8s.gcr.io/ingress-nginx/controller
,那么您使用的是Kubernetes官方版本,通过排除,您可以确定您使用的是不是NGINX实现。我希望每个造成这种混乱状态的人都有非常糟糕的一天。剩下的人...保持乐观!
6yoyoihd4#
也许最近有些人在这里卡住了,我们刚刚做了注解
nginx.ingress.kubernetes.io/proxy-body-size
不再应用,正确的注解应该是:希望这对其他人有帮助。
93ze6v8z5#
更新:
我一直在经历同样的问题,没有解决方案。在阅读了无数的博客和文档,都有相同的建议解决方案,我发现他们已经改变了命名惯例。
它不再是由"代理机构的大小"表示,或者这只是从来没有为我工作。
下面的链接显示要使用的正确配置Map变量为"client-max-body-size"
https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/
9w11ddsr6#
您始终可以进行全局更改并完全禁用它
或设置为5TB
bis0qfac7#
我在configmap上尝试了proxy-body-size和client-max-body-size,并滚动重启了nginx控制器pod,当我在pod中使用grep nginx.conf文件时,它返回默认值1 m。我正在Azure Kubernetes服务(AKS)中尝试执行此操作。我正在与他们的支持人员合作。他们说这不是他们的问题,因为这似乎是一个nginx配置问题。
奇怪的是,我们在Azure中有其他集群,直到我们在一些较新的部署中发现这一点,这才成为一个问题。他们提出的最初修复是这个线程中的内容,但它拒绝更改。
下面是我的配置图:
发出滚动重启后:kubectl卷展重新启动部署/nginx-nginx-入口-控制器-n入口-nginx
通过获取nginx入口控制器pod来查询该值,现在可以看到:
无论我在哪里尝试改变它。在全局或入口路由的配置Map上.......这个值永远不会改变。
gg58donl8#
我可以在修改配置Map后通过重新部署nginx入口控制器来修复它。