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

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


当前回答

如果您正在使用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>

引用:

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

其他回答

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

有同样的问题,client_max_body_size指令被忽略。

我的愚蠢错误是,我把一个文件放在了/etc/nginx/conf里面。D,不以.conf结尾。Nginx默认情况下不会加载这些。

假设你已经在其他答案中设置了client_max_body_size和各种PHP设置(upload_max_filesize / post_max_size等),然后重新启动或重新加载NGINX和PHP,没有任何结果,运行这个…

nginx -

这会让你在NGINX配置中出现任何未解决的错误。在我的情况下,我在413错误中挣扎了一整天,才意识到NGINX配置中还有其他一些未解决的SSL错误(certs的错误路径)需要更正。一旦我修复了从'nginx -T'得到的未解决的问题,重新加载nginx,尤里卡!!这就解决了问题。

如果你尝试了上面的选项,没有成功,你也使用IIS (iisnode)托管你的节点应用程序,把这段代码放在web上。Config帮我解决了这个问题:

这里是参考资料:https://www.inflectra.com/support/knowledgebase/kb306.aspx

此外,您可以更改允许的长度,因为现在我认为它是2GB。根据你的需要修改它。

  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483648" />
    </requestFiltering>
  </security>

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