Nginx上传文件很慢很慢
文章转载自: https://blog.csdn.net/u014240299/article/details/105695993
收到同事反馈,一个上传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ㄒ)/~~ ,😔😔😔
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!