# 问题描述:
前端和后端在联调接口,因为一些特殊需要,需要将接口超时时间设置为2分钟,但是几经更改仍然没有生效,大概30秒左右超时断开,接口调用是通过域名,因此我询问nginx影响,得到反馈是已经设置了,但仍然是超时了。随后便开始排查这个问题。
# 问题分析过程
# 确认问题复现步骤
在本次问题中,可以通过curl请求即可复现。
# 是否是nginx设置了超时?
# 确认部署机器
假设接口是:https://api.xxxx.com ,我需要确认实际请求的机器,使用如下命令
|
|
通过-v
命令可以,查询到curl请求更详细的过程,格式类似如下
|
|
便得到第一步请求到达了 198.18.1.220 机器,登录进行查看。
# 确认web服务器是什么查看日志
公司用到最多的是nginx和haproxy,因此直接使用命令可以查到,这二者同时使用存在端口冲突,一般只会一台机器有一个
|
|
结果类似如下
|
|
通过结果可分析出进程的启动目录,目的是找到日志文件。如果进程中无法分析出,可以进一步通过find命令查看,nginx默认配置文件是nginx.conf
。
|
|
在logs目录中找到nginx错误日志error.log,检索接口,看到有超时日志,接着查看配置信息,有30秒超时设置,因此这里是要更改的。
# nginx配置更新
将30秒超时时间更改为300秒后,再次请求接口,仍然大概30秒断开,但是这次并没有错误信息,返回空值。需要继续排查下去。
# 是否是apigateway层原因
nginx在本次请求链中的作用是反向代理,直接将请求转发到apigateway层,这是一个golang程序,之前有过一些了解,直接找到其日志文件,再次curl进行复现,令我好奇的是,gateway程序有打印正常返回日志,但是却未返回。
因此网关层应该是有设置超时时间的。
在conf目录中找到了几个配置文件,看了一圈并不能确认哪个是超时字段,只有app.conf中有个ServerTimeout字段设置了20,此时我并不知道他就是beego的默认启动配置文件。抱着实验的想法,将20改成了60,将程序重启,然后就有正常返回了。后面还找了好一会ServerTimeout的初始化位置,后面才知道这里是在框架层做的,所以是找不到的。
到此,解决了这个问题。
总结改动点:nginx路径超时时间、apigateway网关层超时时间。