Nginx -413-上传文件太大
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里对上传文件的大小也有设置, 如果超时指定的阈值,仍让会报错。
Spring Boot里上传文件的配置
在spring boot里指定上传文件大小阈值的配置如下:
spring:
servlet:
multipart:
location: /data/temp #保持上传图片的临时路径
enabled: true
max-file-size: 20 #最大文件的size
max-request-size: 30 #最大请求的size