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-fpm
(max_post_size
和max_upload_file_size
相应设置)。
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-fpm
(max_post_size
和max_upload_file_size
相应设置)。
请查看您是否在http {}块中设置client_max_body_size指令,而不是在位置{}块内。我已经将它设置HTTP {}块内,它的工作原理
继nginx documentation,您可以设置在以下方面client_max_body_size20米(或者你需要的任何值):
context: http, server, location
有同样的问题,该client_max_body_size
指令被忽略。
我的愚蠢的错误是,我把一个文件/etc/nginx/conf.d
里面没有以.conf
结束。 Nginx默认不会加载这些内容。
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
有人纠正我,如果这是不好的,但我喜欢一切锁定尽可能多的,如果你只得到了一个目标上传(因为它通常是这种情况),那么只需将您的更改指向该文件。这为我工作在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";
(...)
}
我也喜欢这个想法,但对我而言,它不能以这种方式工作。我所能做的就是降低价值,而不是在地点层面增加价值。 – 2016-12-05 03:53:45
您需要应用以下更改:
更新php.ini
(查找phpinfo();
右ini文件),并增加post_max_size
和upload_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```
为您的网站更新nginx的设置并添加您的location
,http
或server
上下文中的值为。
location/{
client_max_body_size 200m;
...
}
重启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
截至2016年3月,我就遇到了这个问题,试图通过https POST POST json(来自python请求,并不重要)。
诀窍是把“client_max_body_size 200M;”至少在两个地方http {}
和server {}
:
的http
目录
/etc/nginx/nginx.conf
2.的server
目录在你的虚拟主机。
/etc/nginx/sites-available/mysite.com
,对于那些不具备虚拟主机谁,它可能是你的nginx.conf或与它在同一个目录中。3.的location /
目录中的相同的位置2。
/
更具体的,但如果它不工作,我建议将其应用到/
然后一旦其工作更加具体。记住 - 如果你有SSL,这将需要您设置上述供SSL server
和location
也可以是任何地方(理想情况下与2.)。我发现如果你的客户端试图在http上进行上传,并且你希望他们获得301'd的https,那么在重定向之前,nginx会实际上放弃连接,因为这个文件对于http服务器来说太大了,所以它必须是在均为。
最近的评论表明,有这种与新的nginx版本SSL的问题,但我现在的1.4.6,一切都很好:)
该文档声明默认值为“1m”,结果是1兆字节 - 而不是1兆字节。我认为 - 虽然我还没有测试过它 - 它总是兆字节。 – Thomas 2016-09-12 07:32:56
@Thomas是啊,它一直是M不是M,所以它绝对是兆字节,因为我自己进行了测试。 – CppLearner 2016-09-12 18:45:40
谢谢你们两个 - 我删除了位/字节位。 – 2017-08-14 17:20:45
如果您使用的Windows版本nginx的,你可以试试杀死所有的nginx进程并重新启动它来查看。 我遇到同样的问题在我的环境中,但解决了这个解决方案。
你的档案有多大? – 2010-01-13 11:14:57
如果其他人使用Google:Nginx 1.1.19(在Ubuntu 12.04上)*似乎*忽略'http'指令中的client_max_body_size,虽然它在'服务器'中很好。这似乎是在过去6个月左右的更新中引入的,因为对于我来说,同一个服务器上的同一个配置文件用于工作。 – Dave 2014-04-10 11:42:27
启用了SSL的client_max_body_size存在问题。我在持续的nginx版本上遇到了同样的问题,它在安全连接中忽略了这个指令。仍在寻找解决方案。 – Neolo 2013-03-01 20:15:39