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
。
答案 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
目录。
/etc/nginx/sites-available/mysite.com
,对于那些没有vhosts的用户,可能是您的nginx.conf或与其相同的目录。 3。与 2在同一位置的location /
目录。
/
更具体,但如果它根本不起作用,我建议将其应用于/
,然后再将其工作更具体。 请记住 - 如果您有SSL,则需要您为SSL server
和location
设置上述内容,无论在哪里(理想情况下均为的 2 强>)。我发现,如果您的客户端尝试上传http,并且您希望他们获得301到https,那么由于该文件对于http服务器来说太大,nginx实际上会在重定向之前删除连接,因此它具有在两个。
最近的评论表明,在使用较新的nginx版本的SSL上存在此问题,但我在1.4.6并且一切都很好:)
答案 3 :(得分:19)
您需要应用以下更改:
更新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设置,并在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
答案 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进程并重新启动它以查看。 我在我的环境中遇到了同样的问题,但是用这个解决方案解决了它。