Nginx一直说客户端打算发送太大的身体。谷歌和RTM让我找到了client_max_body_size。我在Nginx .conf和vhost conf中设置了200m,重启了Nginx几次,但我仍然得到错误消息。
我是不是忽略了什么?后端是php-fpm (max_post_size和max_upload_file_size是相应设置的)。
Nginx一直说客户端打算发送太大的身体。谷歌和RTM让我找到了client_max_body_size。我在Nginx .conf和vhost conf中设置了200m,重启了Nginx几次,但我仍然得到错误消息。
我是不是忽略了什么?后端是php-fpm (max_post_size和max_upload_file_size是相应设置的)。
当前回答
您需要应用以下更改:
Update php.ini (Find right ini file from phpinfo();) and increase post_max_size and upload_max_filesize to size you want: 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``` Update NginX settings for your website and add client_max_body_size value in your location, http, or server context. location / { client_max_body_size 200m; ... } Restart NginX and PHP-FPM: service nginx restart service php5-fpm restart
注意:有时(在我的情况下几乎每次),如果php-fpm进程没有通过service命令正确刷新,你需要杀死它。要做到这一点,你可以获得进程列表(ps -elf | grep php-fpm)并逐个杀死(kill -9 12345)或使用以下命令为你做:
ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9
其他回答
我遇到了同样的问题,但我发现它与nginx无关。我使用nodejs作为后端服务器,使用nginx作为反向代理,413代码是由节点服务器触发的。节点使用koa解析正文。Koa限制url编码的长度。
formLimit: url编码体的限制。如果主体最终大于此限制,则返回413错误代码。默认为56kb。
将formLimit设置为更大可以解决这个问题。
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 conf文件位于这里:
/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
如果你尝试了上面的选项,没有成功,你也使用IIS (iisnode)托管你的节点应用程序,把这段代码放在web上。Config帮我解决了这个问题:
这里是参考资料:https://www.inflectra.com/support/knowledgebase/kb306.aspx
此外,您可以更改允许的长度,因为现在我认为它是2GB。根据你的需要修改它。
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
截至2016年3月,我遇到了这个问题,试图通过https POST json(从python请求,这并不重要)。
窍门是将“client_max_body_size 200M;”至少放在http{}和server{}两个地方:
1. HTTP目录
通常在/etc/nginx/nginx.conf中
2. vhost中的服务器目录。
对于通过apt-get安装nginx的Debian/Ubuntu用户(以及其他默认使用vhosts安装nginx的发行版包管理器),这是/etc/nginx/sites-available/mysite.com,对于那些没有vhosts的用户,这可能是你的nginx.conf或在相同的目录下。
3.位置/目录在与2相同的位置。
你可以比/更具体,但如果它根本不起作用,我建议将其应用于/,然后一旦它起作用就更具体。
请记住—如果您有SSL,这将要求您为SSL服务器和位置设置上述设置,无论它可能在哪里(理想情况下与2.相同)。我发现,如果你的客户端试图在http上上传,你希望他们得到301跳转到https, nginx实际上会在重定向之前放弃连接,因为文件对http服务器来说太大了,所以它必须在两者中。
最近的评论表明,在更新的nginx版本的SSL上有一个问题,但我在1.4.6上,一切都很好:)
您需要应用以下更改:
Update php.ini (Find right ini file from phpinfo();) and increase post_max_size and upload_max_filesize to size you want: 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``` Update NginX settings for your website and add client_max_body_size value in your location, http, or server context. location / { client_max_body_size 200m; ... } Restart NginX and PHP-FPM: service nginx restart service php5-fpm restart
注意:有时(在我的情况下几乎每次),如果php-fpm进程没有通过service命令正确刷新,你需要杀死它。要做到这一点,你可以获得进程列表(ps -elf | grep php-fpm)并逐个杀死(kill -9 12345)或使用以下命令为你做:
ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9