我们的应用场景是:在后台管理页面,将本地APP升级包通过上传的方式,经由部署在腾讯云的服务器,转存到阿里云的OSS上。后台管理服务部署在腾讯云服务器上,使用的nginx代理。本例使用的是java后台。

问题现象:

上传文件时,由于升级包较大(80M左右),在加载完成进行上传时,服务器返回了错误,错误状态码为:“504 Gateway Timeout”,如图所示:

原因分析:

因为该套代码在测试环境运行是正常的,上传没问题,但是挪到生产环境之后,发现上传失败,报Gateway Timeout网关超时。初步断定生产环境某项设置与测试环境不同。一开始怀疑与文件大小有关,利用上传小文件做测试,发现小文件可以上传成功。检查nginx的设置,发现文件大小限制为200M,足够用了,因此怀疑到nginx里超时时间的设置上。

经多方检查,最后问题定位在“nginx等待服务处理结果的超时时间设定上”,因文件较大,上传时速度较慢,造成nginx等待结果时间较长,引发了该错误。

解决办法:

修改nginx.conf配置,在server{................................}中增加:

#http请求被服务器处理时,nginx会等待处理结果(等待response),此参数为服务器响应时间,默认等待60秒
proxy_read_timeout 600;

将nginx等待结果的时间修改为600秒,重试后文件上传成功,问题解决。

补充说明:

如果单设定上面一项不起作用,还可以增加以下两项设置尝试一下:

#http请求被放在nginx待处理池中等待被服务器处理的最长时间,默认为60秒,可以改大到600秒
proxy_connect_timeout 600;
	
#http请求被服务器处理完后,把数据返回给nginx的时间,默认60秒,可以改大到600秒
proxy_send_timeout 600;

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐