问题描述
公司网站一个页面通过点击“导出数据”来进行数据的导出,后台是通过sql语句进行查询然后再导出为excel文件,因为需要查询数据过多,所以执行起来较慢,每次在等待导出一分钟之后提示网站请求超时。
解决思路
一开始查看了tomcat的连接超时时长,发现时间为20000ms,所以不是tomcat的问题,因为后台是通过nginx反向代理到tomcat,所以就把问题定位到了nginx。然后尝试了keepalive长连接,proxy_send_timeout和proxy_connect_timeout,发现都不能解决问题。后来查看nginx的错误日志发现如下报错信息:
定位问题出现于nginx等待tomcat返回请求的时候超时了,然后添加如下参数解决问题:
proxy_read_timeout 300s
总结:
proxy_read_timeout:nginx等待读取上游服务器响应报文的超时时长;
proxy_send_timeout:nginx发送请求报文到上游服务器的超时时长;
proxy_connect_timeout:上游服务器和nginx的连接超时时长;