Nginx上传文件很慢很慢

收到同事反馈,一个上传apk的接口,传一个180多兆的文件,一直转圈,最终提示上传文件失败

Bug所处背景

带宽为10M(手动😳囧的表情,带宽真给力)的云服务器,额,,,就算按照7M的带宽,如果是一个180M的文件,网络顺畅的话,大概需要xxx 。
项目主要是前端用formData封装file,然后ajax提交。

查找原因

nginx 的error 日志里发现,请求里的body太大了。还有就是前端控制台会报一个ERROR_CONECTION_RESET。
在这里插入图片描述
最初一直怀疑是自己项目里的代码,但是发现后端接口迟迟都没有收到请求,所以应该是卡在了后端接口之前,说到底还是上传慢或者上传途中出问题了。

解决办法

  • 修改nginx的上传文件上限(client_max_body_size),以及缓存(buffer_size)

http {
    include       mime.types;
    default_type  application/octet-stream;
    //客户端请求体最大size ,按需配置吧
    client_max_body_size 1024m;
    sendfile        on;
	...省略...
	location /xxxx { 
		proxy_pass http://xxxapi;   #转发到指定的upstream
		proxy_redirect off;
		proxy_set_header Host $host;    #后端的Web服务器可以通过X-Forwarded-For>获取用户真实IP
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		client_max_body_size 1024m;   #允许客户端请求的最大单文件字节数
		client_body_buffer_size 1024k; #缓冲区代理缓冲用户端请求的最大字节数
		proxy_connect_timeout 90;   #nginx跟后端服务器连接超时时间(代理连接超时)
		proxy_read_timeout 90;      #连接成功后,后端服务器响应时间(代理接收超时)
		proxy_buffer_size 1024k;       #设置代理服务器(nginx)保存用户头信息的缓冲区大小
		proxy_buffers 6 500k;        #proxy_buffers缓冲区,网页平均在32k以下的话>,这样设置
		proxy_busy_buffers_size 1024k; #高负荷下缓冲大小(proxy_buffers*2)
		proxy_temp_file_write_size 1024k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }

  • ajax设置timeout ,如果超时的话,直接走ajax的error方法,里面给出提示
	var formData = new FormData();
	formData.append("file",file);
	

	$.ajax({
		url:'/xxx'
		,type:'post'
		,processData:false
		,contentType:false
		,time: 120000 //ms
		,success:function(data){
		}
		,error:function(){
			//超过了2分钟(timeout),这里提示文件上传失败或者连接超时
		}
    });	

最终结果

上传了一个180多兆的apk,耗3分钟,/(ㄒoㄒ)/~~ ,😔😔😔

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值