阿里云SLB漏选“健康检查正常的http状态码”导致url重定向失败问题处理

简介: 阿里云SLB健康检测状态码选择不正确,导致nginx url重定向的网站访问失败处理流程。
背景:
          一客户将线下电商网站迁移到阿里云上, 公网出口使用阿里云SLB,SLB后端实例为ECS(webserver)web服务使用nginx。后端APP服务器使用了tomcat;tomcat根目录为xxx,应用程序放在其根目录下的一个二级目录AAA,要求公网用户通过域名访问时能直接重定向到二级目录AAA,而不需要手动输入AAA路径来访问网站。
网络示意图如下:
f51c981085cbf3ed29a554b4b06caa1513fd6acd
问题出现:
      首先按照正常的配置流程完成后,在浏览器中通过域名加路径的方式能够正常访问,当在nginx上做过url重定向配置以后,再次访问时,诡异的现象出现了
如下:
浏览器中URL路径倒是被重定向成功了,但访问失败了,且报502错误。
9e6b3e31c8498b468a9d40216611a3bff4588f7d
问题处理过程:
        好吧,当看到上面出现的502报错时,我们都会立马想到可能是nginx服务有问题,或者是后端的tomcat服务有问题, 那我就一步一步排查了。
1 确认tomcat服务是否正常
  常用方法:
  查看tomcat服务是否开启,端口是否开启,是否有防火墙策略阻止,tomcat配置是否正常
2 确认tomcat正常后在到nginx服务器上,看nginx相关服务是否正常( 在这里折腾得最久了)
  首先检测了nginx的服务正常后,开始怀疑,是重定向配置有问题
重定向配置如下:
06ed89d8f0179a5e25c6cdaa09429df627f33428
3 抓包
       在这里处理的过程中我们换过很多种重定向的方式,但问题依然存在,无赖之下,我们对访问时,在浏览器下抓包,和通过curl 获取访问信息

浏览器抓包,看到第一个状态码是301。
如下图:
82002c183b311d1ccaa3ea3d34e709b1cdbae98b
curl 抓取,看到的也是301状态码。
如下图:
9e5304a885a39b21696051efa86876385c5bb5ce
       通过上面的两种方法抓包来看,301是重定向的状态码, ,访问并没有错误,可为什么网页就是不能正常访问呢,此时我们开始怀疑阿里云的SLB的配置了。

4 阿里云SLB 端口健康检测配置修改
      我们一步步检测阿里云SLB的配置,在端口的健康检测配置项中看到了“正常状态码”配置
如下:
758e6564767b71c6624f412414362b7c92c22887
     默认我们都是使用状态码 200 表示健康检测成功,可是我们现在返回的状态码是301,但是我们没有选择,不知道跟这个有没有关系, 于是我们将http_3xx 选中
6a7168c19a3bcc9f99d0a802f40d5ed4c63bf2f1
再次访问网站,终于看到希望了

总结:
        阿里云SLB健康检测,默认情况通过页面返回的状态码200表示后台服务正常,如果网站有做过url重定向,它返回的重定向状态码是3xx 而不是默认的2xx ,此时在配置SLB时,如果在健康检测配置项中不勾选 3xx 那么它会判断为后端服务异常,导致网站访问失败。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
25天前
|
网络协议 开发工具 Android开发
应用研发平台EMAS产品常见问题之接入httpdns后 访问重定向的url访问有问题如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
1月前
|
缓存 UED 开发者
HTTP常用状态码详解
HTTP常用状态码详解
|
2月前
|
XML 存储 缓存
四、《图解HTTP》- 状态码
四、《图解HTTP》- 状态码
44 0
|
3月前
|
缓存 网络协议 数据库连接
C/S架构中HTTP错误状态码原因分析及解决办法
HTTP(Hypertext Transfer Protocol)是用于在客户端和服务器之间传输数据的协议。当在浏览器或其他HTTP客户端中访问网页时,可能会发生各种访问报错。我们需要根据网页提供的错误状态码分析错误原因,以找到相对应的解决办法。
39 0
|
1月前
|
负载均衡 Cloud Native 网络协议
阿里云负载均衡SLB
阿里云负载均衡SLB支持以下类型的负载均衡
51 3
|
2月前
|
缓存
什么是http状态码?常见的有哪些?分别代表什么含义?哪些场景会出现?
什么是http状态码?常见的有哪些?分别代表什么含义?哪些场景会出现?
|
3月前
|
网络协议
HTTP的状态码有哪些?
HTTP的状态码有哪些?
|
3月前
|
存储 缓存 网络协议
HTTP状态码II
HTTP状态码II
|
3月前
|
XML 缓存 安全
HTTP状态码I
HTTP状态码I
|
3月前
|
监控 搜索推荐 定位技术
HTTP状态码:如何修复 404 Not Found错误?
互联网上各种类型的网站非常多,无论用户还是网站运营者不可避免的会遇到404 Not Found错误,如果遇到404错误,我们应该如何解决呢?
30 1