当上传大的文件时经常中断后重头再传或上传超时,原因是nginx对上传文件大小有限制,而且默认是1M,超时时间默认为60秒。
若上传文件很大如50m或网络很慢,还要适当调整上传超时时间。
Nginx 有两个参数需要调整或添加:
1
2
client_max_body_size 100M;
client_body_buffer_size 512k;
参数解释
- client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值。
- client_body_buffer_size 缓冲区代理缓冲用户端请求的最大字节数,设置不能太大,也不能太小,传输的数据大于 client_max_body_size,一定是传不成功的。小于client_body_buffer_size 直接在内存中高效存储。如果大于 client_body_buffer_size 小于 client_max_body_size 会存储临时文件,临时文件一定要有权限。 如果追求效率,就设置 client_max_body_size client_body_buffer_size 相同的值,这样就不会存储临时文件,直接存储在内存了。
关于超时的设置
1
2
3
proxy_connect_timeout 60s;
proxy_read_timeout 1m;
proxy_send_timeout 1m;
- client_body_timeout # 读取请求实体的超时时间,若超过所设定的大小,返回413错误
- proxy_connect_timeout # http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒
- proxy_read_timeout # http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒
- proxy_send_timeout # http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒
把它们酌情增大。
本文网址: https://pylist.com/topic/41.html 转摘请注明来源