Nginx一直说客户端打算发送太大的身体。谷歌和RTM让我找到了client_max_body_size。我在Nginx .conf和vhost conf中设置了200m,重启了Nginx几次,但我仍然得到错误消息。

我是不是忽略了什么?后端是php-fpm (max_post_size和max_upload_file_size是相应设置的)。


当前回答

如果你正在使用windows版本的nginx,你可以尝试杀死所有的nginx进程并重新启动它来查看。 我在我的环境中遇到了同样的问题,但用这个解决方案解决了它。

其他回答

我遇到了同样的问题,但我发现它与nginx无关。我使用nodejs作为后端服务器,使用nginx作为反向代理,413代码是由节点服务器触发的。节点使用koa解析正文。Koa限制url编码的长度。

formLimit: url编码体的限制。如果主体最终大于此限制,则返回413错误代码。默认为56kb。

将formLimit设置为更大可以解决这个问题。

我最近有一个类似的问题,发现client_max_body_size 0;可以解决这样的问题。这将把client_max_body_size设置为无限制。但最佳实践是改进您的代码,因此没有必要增加这个限制。

根据nginx文档,你可以在以下上下文中设置client_max_body_size为20m(或任何你需要的值):

context: http, server, location

如果您正在使用Kubernetes,请在Ingress中添加以下注释:

annotations:
  nginx.ingress.kubernetes.io/client-max-body-size: "5m"
  nginx.ingress.kubernetes.io/client-body-buffer-size: "8k"
  nginx.ingress.kubernetes.io/proxy-body-size: "5m"
  nginx.ingress.kubernetes.io/proxy-buffer-size: "8k"

确认已应用更改:

kubectl -n <namespace> describe ingress <ingress-name>

引用:

客户端缓冲区大小 自定义最大身体尺寸

请查看是否在http{}块中设置client_max_body_size指令,而不是在location{}块中设置client_max_body_size指令。我已经在http{}块内设置了它,它可以工作