nginx一直说client intended to send too large body
.谷歌搜索和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大型上传成功地在托管的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上,按照完美服务器),您将需要在几个单独的文件中管理这些条目.如果您的配置与逐步设置中的配置类似,则需要修改的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
截至2016年3月,我遇到了这个问题,试图通过https POST json(来自python请求,而不是重要).
诀窍是把"client_max_body_size 200M;" 在至少两个地方 http {}
和server {}
:
1.该http
目录
通常在 /etc/nginx/nginx.conf
2.server
vhost中的目录.
对于通过apt-get安装的Debian/Ubuntu用户(以及其他默认情况下使用vhosts安装nginx的发行版软件包管理器),/etc/nginx/sites-available/mysite.com
那些对于那些没有vhosts的人来说,它可能是你的nginx.conf或与它在同一个目录中.
3.将location /
在同一个地方的目录2.
你可以更具体/
,但如果它不起作用,我建议应用它/
,然后一旦它的工作更具体.
记住 -如果你有SSL,这将需要您设置上述供SSL server
和location
也可以是任何地方(最好为同2).我发现,如果您的客户端尝试对HTTP上传,和你期望他们获得301'd到https,nginx的实际上会重定向之前的连接下降由于文件是为HTTP服务器来说太大了,所以它必须是在两者中.
最近的评论表明,使用较新的nginx版本在SSL上存在此问题,但我在1.4.6并且一切都很好:)
您需要应用以下更改:
更新php.ini
(查找正确的ini文件phpinfo();
),并增加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的更新为您的网站设置并添加client_max_body_size
在你的价值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
请查看您是否在http {}块内设置client_max_body_size指令,而不是在location {}块内.我已将其设置在http {}块内并且可以正常工作
有人纠正我,如果这是坏事,但我喜欢尽可能地锁定所有内容,如果你只有一个目标上传(通常是这种情况),那么只需将你的更改定位到那个文件.这适用于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"; (...) }