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是相应设置的)。
当前回答
如果这不好,有人会纠正我,但我喜欢尽可能地锁定所有内容,如果您只有一个上传目标(通常情况下),那么只需将您的更改定向到一个文件。这适用于我的Ubuntu nginx-extras mainline 1.7+包:
location = /upload.php {
client_max_body_size 102M;
fastcgi_param PHP_VALUE "upload_max_filesize=102M \n post_max_size=102M";
(...)
}
其他回答
如果您正在使用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"
确认已应用更改:
kubectl -n <namespace> describe ingress <ingress-name>
引用:
客户端缓冲区大小 自定义最大身体尺寸
如果这不好,有人会纠正我,但我喜欢尽可能地锁定所有内容,如果您只有一个上传目标(通常情况下),那么只需将您的更改定向到一个文件。这适用于我的Ubuntu nginx-extras mainline 1.7+包:
location = /upload.php {
client_max_body_size 102M;
fastcgi_param PHP_VALUE "upload_max_filesize=102M \n post_max_size=102M";
(...)
}
下面的配置对我有用。注意,我只设置client_max_body_size 50M;曾经,与别人所说的相反……
文件:/etc/nginx/conf.d/sites.conf
server {
listen 80 default_server;
server_name portal.myserver.com;
return 301 https://$host$request_uri;
}
server {
resolver 127.0.0.11 valid=30s;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /secret/portal.myserver.com.crt;
ssl_certificate_key /secret/portal.myserver.com.pem;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server_name portal.myserver.com;
client_max_body_size 50M;
location /fileserver/ {
set $upstream http://fileserver:6976;
proxy_pass $upstream;
}
}
您需要应用以下更改:
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
截至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上,一切都很好:)