Nginx+tomcat(或者redis)集群时访问页面出现 504 Geteway Time-out 解决办法之一

在项目开发中遇到Nginx代理Tomcat集群时访问页面出现504 Gateway Time-out错误。问题源于Nginx超时配置和Tomcat的web.xml配置。通过在web.xml中添加启动时立即执行的代码,确保服务器启动时加载容器,避免由于servlet延迟加载导致的超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,在项目开发阶段,使用了Nginx和tomcat、redis集群时出现了标题问题

问题还原

使用Nginx代理和tomcat集群时,访问某页面,页面title部分一直在转圈圈,过了几秒之后页面提示如下
在这里插入图片描述
看到此画面,以为出了什么问题,结果再次访问以下该页面,效果又正常显示了
在这里插入图片描述
查了下百度,看看有没有同等问题,浪费了半小时,发现还是没解决问题,后来自己检查各项配置

  • Nginx配置
    在这里插入图片描述
    在这里我配置了3访问超时效果,就是这里的问题了,在访问页面3秒之后还没得到回应,页面就出现了最开始的画面,仔细检查了这几项配置,再三确认没有问题。之后跑到了web.xml文件里去找问题,最后发现问题。
  • web.xml配置
    在这里插入图片描述
    看起来貌似没有问题,但是仔细想了会,貌似少了啥代码,想了10几秒,突然脑海中跳出来了一句话 启动立即执行
    原来是少了这行代码
    在这里插入图片描述
    容器启动立即加载,为什么少了这行代码就会出现问题呢?
  • 原因在于
    我们需要在服务器启动的时候就要立即去加载容器
    如果我们不加这行代码,那么tomcat一加载,服务器首先给容器的配置文件进行加载,但是并没有给里面实例化对象,servlet相当于刚开始就没有真实的起作用。
    servlet什么时候才起作用啊?当用户第一次发起请求的时候,它才开始起作用,这个时候才开始起作用,也就是servlet现在才真正的去加载和实例化配置文件,和里面的具体信息,但是,大家要知道,容器启动的时间并不止3秒(我前面说过的,我的nginx设置的是3秒超时),那么3秒时间一到就会报超时,但是等我们再第二次刷新的时候,服务器容器已经启动好了,所以就没问题了,所以,归根结底,只是少了一行代码而已
我写博文主要是为了记录曾经犯下的错误,方便以后忘记了再看看博文还能回想起来
对于某些知识点,或许不是理解的不是很到位,或者写的不是很到位
大家看看就好,我只是记录
谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值