当前位置:  开发笔记 > 编程语言 > 正文

nginx - client_max_body_size无效

如何解决《nginx-client_max_body_size无效》经验,为你挑选了6个好方法。

nginx一直说client intended to send too large body.谷歌搜索和RTM指向我client_max_body_size.我将它设置为200mnginx.conf,以及在vhost conf,重启Nginx的几次,但我仍然得到错误信息.

我忽略了什么吗?后端是php-fpm(max_post_size并相应max_upload_file_size地设置).



1> nembleton..:

在nginx文档之后,您可以在以下上下文中设置client_max_body_size 20m(或您需要的任何值):

context: http, server, location


它在我的位置上不起作用,在服务器环境中工作.不确定它是否被覆盖,不能说.
同上Dipen所说的,除了我无法在服务器{}或位置{}块中获取它...它只能在http {}上下文中使用.奇
我可以确认它只适用于在http {}部分中运行在Debian GNU/Linux 7.1(wheezy)上的nginx/1.4.1.

2> jadik..:

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


我建议你改用`/etc/init.d/nginx reload`.这增加了诸如"如果配置错误"等好处,NginX将不会停止运行.
@Hengjie我建议使用`nginx -t`(测试配置文件语法),然后使用`nginx -s reload`(实际重新加载).

3> J.J..:

截至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 serverlocation也可以是任何地方(最好为同2).我发现,如果您的客户端尝试对HTTP上传,和你期望他们获得301'd到https,nginx的实际上会重定向之前的连接下降由于文件是为HTTP服务器来说太大了,所以它必须是在两者中.

最近的评论表明,使用较新的nginx版本在SSL上存在此问题,但我在1.4.6并且一切都很好:)


文档声明默认为"1m",结果是1兆字节 - 而不是1兆位.我想 - 虽然我还没有测试过 - 它总是兆字节.
@Thomas是的,它一直都不是M,所以它肯定是兆字节,因为我自己做了一个测试.
从2018年和nginx版本1.14.1开始,这似乎已解决-在`http`节中使用了client_max_body_size`,而无需将其添加到其他任何地方。

4> Qorbani..:

您需要应用以下更改:

    更新php.ini(查找正确的ini文件phpinfo();),并增加post_max_sizeupload_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,httpserver上下文.

    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



5> rjha94..:

请查看您是否在http {}块内设置client_max_body_size指令,而不是在location {}块内.我已将其设置在http {}块内并且可以正常工作



6> 小智..:

有人纠正我,如果这是坏事,但我喜欢尽可能地锁定所有内容,如果你只有一个目标上传(通常是这种情况),那么只需将你的更改定位到那个文件.这适用于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";
    (...)
}

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有