文件上传时,文件太大会有几种被限制的情况
近期在维护一个项目时,商户有反馈,在新增用户时会直接卡住并报错,返回一个异常,应用层没有日志,最后排查出来是nginx限制了请求的最大值.
那么整个链路上都有哪些可能导致上传会被限制.比如前端页面表单输入数据较多,包含多个文本、多张图片,在数据未压缩的情况下,最终上传失败? 下面了梳理一下.
一个请求需要经过的路径:
nginx->servlet中间件->具体应用框架(springmvc,strust2)->内部rpc访问->数据库
下面这里汇总一下中间过程可能会导致限流的地方,以及需要调整的配置.
nginx
用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中是无法记录到访问的.
nginx 日志文件里会提示 send too large body:50746366(大概是50MB)
查看nginx的配置,进入:/usr/local/nginx/conf/nginx.conf
(具体名字和路径可能不一样)
client_max_body_size 20m; 需要调整,(如果不配置则默认是1M)
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
client_max_body_size 20m;
include upstream.conf;
limit_conn_zone $binary_remote_addr zone=one:10m;
tomcat
当服务器是Tomcat时,通过POST上传的文件大小的最大值为2M(2097152)
tomcat目录下的conf文件夹下,server.