Nginx 服务器上传大文件经常中断的解决方法

当上传大的文件时经常中断后重头再传或上传超时,原因是nginx对上传文件大小有限制,而且默认是1M,超时时间默认为60秒。

nginx上传文件

若上传文件很大如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 转摘请注明来源

Suggested Topics

服务器推送技术 Tornado comet

long poll的原理是,客户端与服务器将建立一条长连接,也就是说,客户端会发出一个请求,而服务器,将阻塞请求,直到有数据需要传递,才会返回。 ...

python 标准库读写CSV 文件

CSV 是(Comma Separated Values 逗号分隔值)的英文缩写,通常都是纯文本文件。这里介绍使用python 标准库读写csv 文件的方法。...

Leave a Comment