一次线上ngix的504 gateway timeout排查(真实案例)

1.写在前面

在上周某天6点的时候,同事A,过来找了我!!!(内心:该死的下班6点)

同事A说:“阿深,你好呀,有个问题,可以帮我看下嘛?”
我:“嗯嗯,行。”(屁颠屁颠就去到了同事A的工位)
我内心:“这,我还能拒绝嘛?什么鬼玩意,怎么总是在下班的时候找我?”

然后看到同事A,正在远程实施人员B的电脑,处理某个网站的问题。

同事A就说:“我这边通过nginx+tomcat的环境下,通过域名访问网站,出现页面某个请求,超过15s的时候,就会出现504 gateway timeout的问题”。

这么一听,心想:“这不就是nginx超时了嘛,配置一下nginx,估计就能解决。”
嘿嘿,哥们也能准时下班了吧!!!^_^

我就说,这个配置一下nginx的超时时间,应该就可以了吧。

可是同事A说,我已经配置过了,已经增加了nginx的超时时间了。但是还是会出现超时。

我:“这。。。可能这问题,就不简单了!!!”
看来,还是不能准时下班了。
那就开始问题的寻找吧,开干!!!

2.问题排查

2.1nginx.conf配置修改

网上大部分的都是这样的答案:

nginx.conf

 还是不行,一样出现504的异常

那就再搜索网上答案,加buffer缓冲

加上了,还是不行,一样出现504的异常

这就有点头疼了!!!

2.2nginx.conf配置,是否被使用?

然后,就在想,修改的nginx.conf配置文件,是否被使用到呢?

nginx -t

通过上面的命令,查看nginx启动时,所用到的配置文件。

答案,确实是我们用到的配置文件。

2.3nginx.conf配置,是否生效?

我们先关闭nginx进程

nginx -s stop

然后通过域名,再访问网站。

好家伙,这个时候,居然还能正常访问。

然后,我就问同事A,你们是有多个nginx的嘛?

同事A的回答是,不是吧,我们只有一个nginx的。

我说,但是我已经关闭了nginx了,还是正常访问到。你这肯定是有多个nginx的了。

然后看了一下ssh连接工具。

好家伙,被我逮到了吧,你这明显有两个nginx了。

同事A,一脸懵逼(可能他也是接手以前同事的项目,估计也不是很熟悉整个框架)

行,那我们再讲nginx2的进程关闭了。

再次访问系统,已经是无法访问到了。

哎,到这里,咋们好像看到了曙光!!!^_^

估计这里生效的就只有nginx2的服务器里面的nginx。

这说明了啥?

说明了我们之前修改的nginx.conf配置文件,一直都改错地方了。

这里,咋们马上再修改nginx2服务器的nginx。看看效果!!!

还是不行,还是报了504 gateway timeout的错

瞬间,又失去了准时下班的机会了!!!行吧,继续找吧!!!

2.4查看nginx的日志文件,是否又报错?

tail -f log/access.log
tail -f log/error_log.log

分别查看了访问日志,错误日志,均无发现又异常的信息

也没有看到超时的字眼。

哎呀,这就奇怪了?难道是tomcat报的超时?

2.5查看tomcat的日志文件,是否又报错?

查看日志命令

tail -f log/catalina.out

也是很奇怪,没看到有报错的信息。

这就蒙圈了呀!!!

不过,问题还是得解决!!!

不知不觉,时间快到7点了,咋办呢?

这个时候,同事A的电话响起,好家伙,他女朋友打电话来催他了。

哎,这个是好事呀,我说:你这个问题紧急嘛?要不明天再看看?

同事A,马上说不紧急,毕竟他也想走了。

哈哈,大家都不咋想加班!!!行,给个台阶大家,先溜了,第二天再看看吧。

2.6验证直接访问tomcat,看下是否会出现超时问题?

第二天上班,继续处理这个问题。

我们先测试一下,直接访问tomcat,看下会不会出现超时的问题?

直接ip加端口访问,好家伙,不通呀。我就问同事A,什么情况?网络不通的嘛?

同事A反馈说,他也不太清楚。

我想了一下,是不是开了防火墙,然后把防火墙关了,直接ip+端口访问,通了。

然后测试下,那个功能,这个接口,正常了!!!

好像问题越来越近了!!!

那就说明了,不是tomcat的问题了,是nginx的问题了。

真相越来越近了!!!

2.7验证nginx的问题?

1、超时15s的问题(ajax方向找)

该项目,用的是传统的jquery,这个ajax,我记得默认是不会设置超时时间的呀。

默认值为0,表示没有超时。

2、超时15s的问题(nginx配置方向找)

我查看了nginx下的conf文件夹,里面所有的配置文件,都没有出现15这个字眼。

验证到这里,我们也是有点懵逼了。好像找不到原因了。

难道是nginx的问题?

行,那我们重新安装一个新的nginx。

2.8重新安装nginx,进行验证?

接着,我们重新装了个nginx。

好家伙,还是出现了15s超时!!!

验证到这里,有点放弃的感觉!!!

突然直接,灵机一动:

我们刚才直接测试tomcat的时候,是直接通过ip+端口,进行访问的。

那我们这里也试一下,直接通过ip+端口,访问nginx。

2.9ip+端口,直接访问nginx,进行验证?

直接访问项目:192.168.4.xxx:8090/llsydn

因为nginx监听的端口为8090,通过这个域名访问,出现了有写js,css加载不了。

这里估计进行了防盗链的处理。

行吧,那我们再将nginx的端口改为80,然后再访问一便。

进入到项目,然后测试下,那个功能,这个接口,正常了!!!

哇,这就行了?

看到这里,哥们大概知道问题所在了:

通过域名访问,就报了504 gateway timeout

通过ip+端口直接访问nginx,就无问题。

这就说明了,不是我们nginx的问题,也不是tomcat的问题。

是域名的问题,罪魁祸首是域名

应该是域名,转发到我们的服务器的时候,域名那边做了配置,15s超时。

行吧,既然发现了问题。我就叫同事A,将相关测试的结果,直接反馈给实施人员B。

叫实施人员B,去处理域名转发的问题了。

问题解决了,完美!!!

哈哈,今天能准时下班了吧?

3.总结 

很多时候,我们遇到问题的时候,要尝试从不同的方向进行验证。

程序员,还是得不断折腾,才能有进步吧。

哈哈,有时候遇到得问题,不一定都是咋们的问题,有可能是别人的问题。

咋们对自己还是得有点信息,哈哈!!!

好了,以上就是一次线上ngix的504 gateway timeout排查的全过程了。

这里分享了一些,可以进行验证的思路,遇到类似问题的时候,大家伙可以参考一下。

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

个人理解,可能也不够全面,班门弄斧了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:根据查询结果,出现"Failed to load resource: the server responded with a status of 504 (Gateway Timeout)"错误通常与ngix超时时间有关。\[1\]这个错误表示服务器在请求网关时超时了。引用\[2\]中提到了一种解决方案,即修改nginx.conf配置文件中的proxy_read_timeout的值来解决504超时问题。如果没有该配置项,则需要手动添加到location /{}里面。修改完配置文件后,需要重启nginx才能生效。\[2\]引用\[3\]中提到了另一种可能的原因,即后端的SQL语句错误导致查询失败。如果出现"Unknown column 'loginCout' in 'field list'"的错误,说明实体类的属性和数据库表的字段名不匹配。\[3\]因此,解决这个问题需要检查后端的SQL语句和数据库表的字段名是否一致。 #### 引用[.reference_title] - *1* [Failed to load resource: the server responded with a status of 504](https://blog.csdn.net/jackfeng86/article/details/125664999)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Failed to load resource: the server responded with a status of 504 (Gateway Time-out)](https://blog.csdn.net/github_39325328/article/details/79820598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Failed to load resource: the server responded with a status of 500 ()](https://blog.csdn.net/qq_44231797/article/details/121406270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值