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地设置).
nem*_*ton 125
在nginx文档之后,您可以在以下上下文中设置client_max_body_size 20m(或您需要的任何值):
context: http, server, location
Run Code Online (Sandbox Code Playgroud)
jad*_*dik 94
NGINX大型上传成功地在托管的WordPress网站上工作,最后(根据nembleton和rjha94的建议)
如果我对他们的建议稍加澄清,我认为这可能对某人有帮助.对于初学者,请确保您已在所有三个单独的定义块(服务器,位置和http)中包含增加的上载指令.每个都应该有一个单独的行条目.结果将像这样(其中...反映定义块中的其他行):
http {
...
client_max_body_size 200M;
}
Run Code Online (Sandbox Code Playgroud)
(在我的ISPconfig 3设置中,此块位于/etc/nginx/nginx.conf文件中)
server {
...
client_max_body_size 200M;
}
location / {
...
client_max_body_size 200M;
}
Run Code Online (Sandbox Code Playgroud)
(在我的ISPconfig 3设置中,这些块位于/etc/nginx/conf.d/default.conf文件中)
另外,请确保您的服务器的php.ini文件与这些NGINX设置一致.在我的例子中,我将php.ini的File_Uploads部分中的设置更改为:
upload_max_filesize = 200M
Run Code Online (Sandbox Code Playgroud)
注意:如果您正在管理ISPconfig 3设置(我的设置在CentOS 6.3上,按照完美服务器),您将需要在几个单独的文件中管理这些条目.如果您的配置与逐步设置中的配置类似,则需要修改的NGINX配置文件位于以下位置:
/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)
我的php.ini文件位于:
/etc/php.ini
Run Code Online (Sandbox Code Playgroud)
我继续忽略nginx.conf文件中的http {}块.显然,忽略这一点会产生限制上传到1M默认限制的效果.完成相关更改后,您还需要确保重新启动NGINX和PHP FastCGI Process Manager(PHP-FPM)服务.在上面的配置中,我使用以下命令:
/etc/init.d/nginx restart
/etc/init.d/php-fpm restart
Run Code Online (Sandbox Code Playgroud)
J.J*_*J.J 62
截至2016年3月,我遇到了这个问题,试图通过https POST json(来自python请求,而不是重要).
诀窍是把"client_max_body_size 200M;" 在至少两个地方 http {}和server {}:
1.该http目录
/etc/nginx/nginx.conf2.server vhost中的目录.
/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并且一切都很好:)
Qor*_*ani 23
您需要应用以下更改:
更新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```
Run Code Online (Sandbox Code Playgroud)nginx的更新为您的网站设置并添加client_max_body_size在你的价值location,http或server上下文.
location / {
client_max_body_size 200m;
...
}
Run Code Online (Sandbox Code Playgroud)重启NginX和PHP-FPM:
service nginx restart
service php5-fpm restart
Run Code Online (Sandbox Code Playgroud)注意:有时(在我的情况下几乎每次)php-fpm如果没有正确刷新服务命令,你需要杀死进程.为此,您可以获取进程列表(ps -elf | grep php-fpm)并逐个删除(kill -9 12345)或使用以下命令为您执行此操作:
ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
小智 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";
(...)
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我最近遇到了类似的问题,发现client_max_body_size 0;可以解决这样的问题。这会将client_max_body_size设置为无限制。但是最好的做法是改进你的代码,所以没有必要增加这个限制。
如果您使用 Kubernetes,请将以下注释添加到您的 Ingress:
annotations:
nginx.ingress.kubernetes.io/client-max-body-size: "5m"
nginx.ingress.kubernetes.io/client-body-buffer-size: "8k"
nginx.ingress.kubernetes.io/proxy-body-size: "5m"
nginx.ingress.kubernetes.io/proxy-buffer-size: "8k"
Run Code Online (Sandbox Code Playgroud)
确认更改已应用:
kubectl -n <namespace> describe ingress <ingress-name>
Run Code Online (Sandbox Code Playgroud)
参考:
| 归档时间: |
|
| 查看次数: |
235950 次 |
| 最近记录: |