Nginx默认是上传一个不能超过1M大小的文件
nginx上传文件大小报错500的解决办法:
#设置 body内容大小为xxxM,
上传文件大小相关的有三个配置- client_body_buffer_size 配置请求体缓存区大小, 不配的话,
- client_body_temp_path 设置临时文件存放路径。只有当上传的请求体超出缓存区大小时,才会写到临时文件中
- client_max_body_size 设置上传文件的最大值
亲测:一般我们设置 client_body_buffer_size、client_max_body_size 即可!
实战demo:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name 127.0.0.1;
add_header X-Frame-Options SAMEORIGIN;
charset utf-8;
ssl on;
ssl_certificate conf.d/ssl/server.crt;
ssl_certificate_key conf.d/ssl/server.key;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5:!DES:!3DES;
ssl_prefer_server_ciphers on;
ssl_dhparam conf.d/dhparams-2048.pem;
limit_conn one 1000;
limit_conn perserver 10000;
#limit_req zone=allips burst=5 nodelay;
location /api {
client_max_body_size 600M;
client_body_buffer_size 600M;
uwsgi_send_timeout 1800;
uwsgi_connect_timeout 1800;
uwsgi_read_timeout 1800;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
proxy_send_timeout 1800;
include conf.d/uwsgi_params;
uwsgi_pass 127.0.0.1:8889;
}
————————————————
nginx里请求默认最大size为1M。 所以当上传文件的大小超过1M的时候会出现错误 http response code:413 REQUEST_ENTITY_TOO_LARGE 上传文件太大。
问题及方案
一开始我只设置client_max_body_size:50m, 错误“REQUEST_ENTITY_TOO_LARGE 上传文件太大 ”没有了,但是上传文件时有开始报 “ Failed to load resource: net: ERR_CONNECTION_RESET”,连接被重置了,我猜测连接因为什么原因被重置了, 所以我调大了指令keepalive_timeout的值为 650, 然后再上传大文件就可以了, 但是第二天有出现了 “ Failed to load resource: net: ERR_CONNECTION_RESET”, 参考https://www.cnblogs.com/kikyoqiang/p/16878961.html 博文, 添加了指令: send_timeout 650 (指定nginx发送response 给client的超时时间), 测试了上传15M的数据可以了,之后上传文件就可以了。
最后nginx的配置如下
nginx支持大文件上传的配置:
http {
keepalive_timeout 650; # 客户端和nginx是长连接,
client_body_timeout 600;
send_timeout 650;
proxy_connect_timeout 60s; # nginx到后台server的连接的超时时间
proxy_read_timeout 1m; # nginx从后台server的读数据的超时时间
proxy_send_timeout 1m; # nginx发送数据到后台server发送时间
client_max_body_size 50m; #请求体的阈值
client_body_buffer_size 500m; #Buffer的大小
client_body_temp_path /usr/local/nginx/client_body_temp 5 5; #如果buffer用完了,则把上传的数据写到client_body_temp_path指令配置的路径
}
参数说明:
client_max_body_size 50m; 指定请求体的大小阈值 改完request body大小为50m
keepalive_timeout 650 650 指令的第一个值指定客户端到web server的连接超时时间,如果是0,连接为短连接; 第二个值为:在response header 添加一个参数“ “Keep-Alive: timeout=650””
The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections.
send_timeout nginx发送response 到client的超时时间
但是还有一点需要注意,过来nginx这一关,请求就进入到application server,如tomcat,在tomcat 或者 spring web mvc里对上传文件的大小也有设置, 如果超时指定的阈值,仍让会报错。
评论
本文评论功能已关闭。