nginx – client_max_body_size没有效果
nginx一直说client intended to send too large body
。 谷歌search和RTM指出我client_max_body_size
。 我把它设置为200m
在nginx.conf
以及在vhost conf
,重新启动Nginx几次,但我仍然收到错误消息。
我忽略了什么? 后端是php-fpm
( max_post_size
和max_upload_file_size
地设置)。
在nginx文档之后 ,您可以在以下上下文中设置client_max_body_size 20m(或您需要的任何值):
context: http, server, location
NGINX大量上传在托pipe的WordPress网站上成功运行,最后(根据nembleton&rjha94的build议)
如果我在他们的build议中加了一点澄清,我认为这可能对某人有帮助。 对于初学者,请确定您已经在所有三个单独的定义块(服务器,位置和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
注意:如果您正在pipe理ISPconfig 3设置(我的设置位于CentOS 6.3上,按照Perfect Server ),您将需要在几个单独的文件中pipe理这些条目。 如果您的configuration与分步设置中的configuration类似,您需要修改的NGINXconfiguration文件位于:
/etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf
我的php.ini文件位于这里:
/etc/php.ini
我继续忽略了nginx.conf文件中的http {}块。 显然,忽略这个限制上传到1M默认限制的效果。 进行相关更改后,您还需要确保重新启动您的NGINX和PHP FastCGIstream程pipe理器(PHP-FPM)服务。 在上面的configuration中,我使用下面的命令:
/etc/init.d/nginx restart /etc/init.d/php-fpm restart
截至2016年3月 ,我遇到了这个问题试图通过https发送json(从python请求,而不是重要的)。
诀窍是把“client_max_body_size 200M” 至less在两个地方http {}
和server {}
:
1. http
目录
- 通常在
/etc/nginx/nginx.conf
2.你的虚拟主机中的server
目录。
- 对于通过apt-get安装的Debian / Ubuntu用户(以及默认安装nginx vhosts的其他发行版软件包pipe理器),对于那些没有vhosts的用户,可能是
/etc/nginx/sites-available/mysite.com
你的nginx.conf或者它在同一个目录下。
3. location /
目录与2相同。
- 你可以比
/
更具体,但如果它不工作,我build议将它应用于/
然后一旦它的工作更具体。
请记住 – 如果您拥有SSL,则需要您为SSL server
和location
设置上述location
,无论location
如何(理想情况下与2.相同)。 我发现如果你的客户端试图在http上进行上传,并且你希望他们得到301的https,那么在redirect之前,nginx会实际上删除连接,因为这个文件对于http服务器来说太大了,所以它必须是在两个 。
最近的评论表明,在SSL上使用较新的nginx版本存在一个问题,但我在1.4.6上,一切都很好:)
您需要应用以下更改:
-
更新
php.ini
(从phpinfo();
)find正确的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
上下文中添加client_max_body_size
值。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
( kill -9 12345
)或者使用下面的命令为你做:
ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9
请看看你是否在http {}块内设置client_max_body_size指令,而不是位于{}块内。 我已经在http {}块中设置它,它的工作原理
有人纠正我,如果这是不好的,但我想尽可能locking一切,如果你只有一个目标上传(如通常情况下),然后只是针对您的更改到一个文件。 这适用于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"; (...) }
有同样的问题, client_max_body_size
指令被忽略。
我的愚蠢的错误是,我把一个文件放在/etc/nginx/conf.d
,而不是以.conf
结尾。 Nginx默认不会加载这些。
如果你使用的是windows版本的nginx,你可以尝试杀死所有的nginx进程并重新启动它来查看。 我遇到了同样的问题在我的环境中,但解决了这个解决scheme。