2010-01-13 246 views
146

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

我忽略了什么?后端是php-fpmmax_post_sizemax_upload_file_size相应设置)。

+0

你的档案有多大? – 2010-01-13 11:14:57

+13

如果其他人使用Google:Nginx 1.1.19(在Ubuntu 12.04上)*似乎*忽略'http'指令中的client_max_body_size,虽然它在'服务器'中很好。这似乎是在过去6个月左右的更新中引入的,因为对于我来说,同一个服务器上的同一个配置文件用于工作。 – Dave 2014-04-10 11:42:27

+1

启用了SSL的client_max_body_size存在问题。我在持续的nginx版本上遇到了同样的问题,它在安全连接中忽略了这个指令。仍在寻找解决方案。 – Neolo 2013-03-01 20:15:39

回答

11

请查看您是否在http {}块中设置client_max_body_size指令,而不是在位置{}块内。我已经将它设置HTTP {}块内,它的工作原理

103

nginx documentation,您可以设置在以下方面client_max_body_size20米(或者你需要的任何值):

context: http, server, location 
+0

此提示非常有帮助 – Shoan 2012-02-20 08:14:04

+11

它在位置上不适用于我,在服务器上下文中工作。不知道它是否被覆盖,不能说。 – Dipen 2012-06-12 10:30:04

+0

@迪彭:有趣。你有什么版本的NGinx? – nembleton 2012-06-12 12:53:55

0

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

我的愚蠢的错误是,我把一个文件/etc/nginx/conf.d里面没有以.conf结束。 Nginx默认不会加载这些内容。

70

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的conf文件需要修改都设在这里:

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

我的php.ini文件所在的位置:

/etc/php.ini 

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

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

我建议你使用'/etc/init.d/nginx reload'来代替。这增加了诸如'如果配置错误'的好处,NginX不会停止运作。 – Hengjie 2013-02-06 22:46:48

+0

谢谢你对我真的很有帮助!解决了我的问题后,有很多不同的php.ini文件设置等。 – Yos 2013-04-05 10:08:55

+0

小写m为我们工作。 client_max_body_size 100m; – 2014-07-01 19:34:21

8

有人纠正我,如果这是不好的,但我喜欢一切锁定尽可能多的,如果你只得到了一个目标上传(因为它通常是这种情况),那么只需将您的更改指向该文件。这为我工作在Ubuntu nginx的,额外主线1.7+包:

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

我也喜欢这个想法,但对我而言,它不能以这种方式工作。我所能做的就是降低价值,而不是在地点层面增加价值。 – 2016-12-05 03:53:45

15

您需要应用以下更改:

  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的设置并添加您的location,httpserver上下文中的值为。

    location/{ 
        client_max_body_size 200m; 
        ... 
    } 
    
  3. 重启nginx的和PHP-FPM:

    service nginx restart 
    service php5-fpm restart 
    

注意:有时(在几乎每一次我的情况),你需要杀死php-fpm过程,如果它没有被刷新服务命令正确。要做到这一点,你可以得到的进程(ps -elf | grep php-fpm)名单并杀死其中通过以下命令来为你做一个(kill -9 12345)或使用:

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

截至2016年3月,我就遇到了这个问题,试图通过https POST POST json(来自python请求,并不重要)。

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

http目录

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

2.server目录在你的虚拟主机。

  • 对于通过apt-get的(和安装在默认情况下虚拟主机nginx的其他发行版软件包管理器)谁装的Debian/Ubuntu的用户,那/etc/nginx/sites-available/mysite.com,对于那些不具备虚拟主机谁,它可能是你的nginx.conf或与它在同一个目录中。

3.location /目录中的相同的位置2。

  • 你可以比/更具体的,但如果它不工作,我建议将其应用到/然后一旦其工作更加具体。

记住 - 如果你有SSL,这将需要您设置上述供SSL serverlocation也可以是任何地方(理想情况下与2.)。我发现如果你的客户端试图在http上进行上传,并且你希望他们获得301'd的https,那么在重定向之前,nginx会实际上放弃连接,因为这个文件对于http服务器来说太大了,所以它必须是在均为

最近的评论表明,有这种与新的nginx版本SSL的问题,但我现在的1.4.6,一切都很好:)

+3

该文档声明默认值为“1m”,结果是1兆字节 - 而不是1兆字节。我认为 - 虽然我还没有测试过它 - 它总是兆字节。 – Thomas 2016-09-12 07:32:56

+2

@Thomas是啊,它一直是M不是M,所以它绝对是兆字节,因为我自己进行了测试。 – CppLearner 2016-09-12 18:45:40

+0

谢谢你们两个 - 我删除了位/字节位。 – 2017-08-14 17:20:45

-2

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