nginx - client_max_body_size无效

时间:2010-01-13 11:10:13

标签: nginx

nginx一直在说client intended to send too large body。谷歌搜索和RTM向我指出client_max_body_size。我在200m以及nginx.conf中将其设置为vhost conf,重新启动了Nginx几次,但我仍然收到错误消息。

我忽视了什么吗?后端为php-fpmmax_post_size并相应地设置max_upload_file_size

13 个答案:

答案 0 :(得分:120)

nginx documentation之后,您可以在以下上下文中设置client_max_body_size 20m(或您需要的任何值):

context: http, server, location

答案 1 :(得分:87)

NGINX大型上传成功地在托管的WordPress网站上工作,最后(根据nembleton& rjha94的建议)

如果我对他们的建议稍加澄清,我认为这可能对某人有帮助。对于初学者,请确保您已将增加的上传指令包含在所有三个单独的定义块(服务器,位置和http)中。每个都应该有一个单独的行条目。结果会像这样(其中...反映了定义块中的其他行):

http {
    ...
    client_max_body_size 200M;
}    

(在我的ISPconfig 3设置中,此块位于/etc/nginx/nginx.conf文件中)

server {
    ...
    client_max_body_size 200M;
}

location / {
    ...
    client_max_body_size 200M;
} 

(在我的ISPconfig 3设置中,这些块位于/etc/nginx/conf.d/default.conf文件中)

另外,请确保您的服务器的php.ini文件与这些NGINX设置一致。在我的例子中,我将php.ini的File_Uploads部分中的设置更改为:

upload_max_filesize = 200M

注意:如果您正在管理ISPconfig 3设置(我的设置在CentOS 6.3上,按照The Perfect Server),您需要在几个单独的文件中管理这些条目。如果您的配置与逐步设置中的配置类似,则需要修改的NGINX配置文件位于此处:

/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf 

我的php.ini文件位于:

/etc/php.ini

我继续忽略nginx.conf文件中的http {}块。显然,忽略这一点会产生限制上传到1M默认限制的效果。完成相关更改后,您还需要确保重新启动NGINX和PHP FastCGI Process Manager(PHP-FPM)服务。在上面的配置中,我使用以下命令:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

答案 2 :(得分:55)

2016年3月开始,我遇到了这个问题,尝试通过https POST json(来自python请求,而不是重要)。

诀窍是把" client_max_body_size 200M;"至少在两个地方http {}server {}

1。 http目录

  • 通常在/etc/nginx/nginx.conf

2。 vhost中的server目录。

  • 对于通过apt-get安装的Debian / Ubuntu用户(以及其他默认情况下使用vhost安装nginx的发行版软件包管理员),那些/etc/nginx/sites-available/mysite.com,对于那些没有vhosts的用户,可能是您的nginx.conf或与其相同的目录。

3。 2在同一位置的location /目录。

  • 您可以比/更具体,但如果它根本不起作用,我建议将其应用于/,然后再将其工作更具体。

请记住 - 如果您有SSL,则需要您为SSL serverlocation设置上述内容,无论在哪里(理想情况下均为的 2 )。我发现,如果您的客户端尝试上传http,并且您希望他们获得301到https,那么由于该文件对于http服务器来说太大,nginx实际上会在重定向之前删除连接,因此它具有在两个

最近的评论表明,在使用较新的nginx版本的SSL上存在此问题,但我在1.4.6并且一切都很好:)

答案 3 :(得分:19)

您需要应用以下更改:

  1. 更新php.ini(从phpinfo();查找正确的ini文件)并将post_max_sizeupload_max_filesize增加到您想要的尺寸:

    sed -i "s/post_max_size =.*/post_max_size = 200M/g" /etc/php5/fpm/php.ini
    sed -i "s/upload_max_filesize =.*/upload_max_filesize = 200M/g" /etc/php5/fpm/php.ini```
    
  2. 更新您网站的NginX设置,并在client_max_body_sizelocationhttp上下文中添加server值。

    location / {
        client_max_body_size 200m;
        ...
    }
    
  3. 重新启动NginX和PHP-FPM:

    service nginx restart
    service php5-fpm restart
    
  4. 注意:有时(在我的情况下几乎每次)如果没有正确刷新服务命令,你需要杀死php-fpm进程。为此,您可以获取进程列表(ps -elf | grep php-fpm)并逐个删除(kill -9 12345)或使用以下命令为您执行此操作:

    ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9
    

答案 4 :(得分:11)

请查看您是否在http {}块内设置client_max_body_size指令,而不是在位置{}块内。我已将其设置在http {}块内并且可以正常工作

答案 5 :(得分:10)

有人纠正我,如果这很糟糕,但我想尽可能地锁定所有内容,如果你只有一个上传目标(通常就是这种情况),那么只需将你的更改定位到那个文件。这对我来说适用于Ubuntu nginx-extras主线1.7+包:

location = /upload.php {
    client_max_body_size 102M;
    fastcgi_param PHP_VALUE "upload_max_filesize=102M \n post_max_size=102M";
    (...)
}

答案 6 :(得分:2)

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

  

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

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

答案 7 :(得分:1)

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

nginx -T

这将为您提供NGINX配置中所有未解决的错误。以我为例,我整整一天都在经历413错误,然后才意识到NGINX配置中还有其他一些未解决的SSL错误(证书的路径错误)需要纠正。一旦我解决了未解决的问题,我就从“ nginx -T”,重新加载的NGINX和EUREKA中获得了!这样就解决了。

答案 8 :(得分:1)

我正在设置开发服务器以与我们过时的实时服务器进行镜像,我使用了The Perfect Server - Ubuntu 14.04 (nginx, BIND, MySQL, PHP, Postfix, Dovecot and ISPConfig 3)

遇到相同的问题后,我遇到了这篇文章,但没有任何效果。我更改了每个推荐文件(nginx.conf,ispconfig.vhost,/ sites-available / default等)中的值

最后,在我的client_max_body_size中更改/etc/nginx/sites-available/apps.vhost并重新启动nginx是解决问题的办法。希望它可以帮助其他人。

答案 9 :(得分:0)

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

我的愚蠢错误是,我在/etc/nginx/conf.d内放了一个文件,但没有以.conf结尾。 Nginx默认不会加载它们。

答案 10 :(得分:0)

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

答案 11 :(得分:0)

如果您尝试了上述选项,但没有成功,则还使用IIS(iisnode)托管您的节点应用程序,将此代码放在web.config上可以为我解决问题:

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

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

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

答案 12 :(得分:-1)

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