阿里云负载均衡监听端口异常的分析

今天为应用配置负载均衡,监听的前端设置为https 443端口,后端为http 80端口,设置后,健康监测一直显示异常,访问url也报502异常。
反复监测,排除了以下原因:

  1. 负载均衡的配置正确;
  2. 域名解析正确,能通过域名ping到负载均衡对应的服务地址;
  3. 前端配置https,后端配置http,而负载均衡配置的证书是正确的,所以不可能是tomcatserver.xml的证书配置问题(不需要配置,因为后端是http协议)。

那问题出在哪里呢?

负载均衡的监听显示的是http:80异常:


image.png

因此,问题很可能出在服务器ECS上。
所以继续查看负载均衡配置的后端服务器:


阿里云负载均衡监听端口异常的分析_第1张图片
image.png

后端服务器的状态显示443异常端口,这么说问题又是因为负载均衡的前端配置上,因为443端口是前端的https协议的端口。
那问题出在哪里呢?监听显示时http 80端口异常,后端服务器状态显示https 443端口异常。
是在没办法,只能求出阿里云的工单,查询一下,这个问题还很常见:

阿里云的健康监测,支持4层和7层检查,4层检查简单来说就是连接一下tcp端口看能否连接。7层检查目前支持HTTP和HTTPS,用户需要提供一个URL,健康检查会定期去访问这个URL,如果返回的HTTP CODE是200的话认为健康,否则认为出错。

针对7层(HTTP协议)服务,SLB系统的健康检查机制为:默认通过后端ECS内网IP地址来向该服务器应用服务器配置的缺省首页发起http head请求(缺省通过在服务监听配置中指定的后端ECS端口进行访问),返回200 OK后将视为后端ECS运行正常,否则视为后端ECS运行异常。如果用户用来进行健康检查的页面并不是应用服务器的缺省首页,那么需要用户指定相应的URI。如果用户对http head请求限定了host字段的参数,那么需要用户指定相应的URL。

负载均衡的配置中我们没有指定url,所以阿里云的健康监测定期访问了我们的默认页面index.html
问题就出在index.html上。由于业务需要,index.html页面是一个欢迎页,也即首页。在html文档的部分有跳转逻辑。如果用户登录过,则直接跳转到主界面。而我们的主界面是一个复杂的业务界面,需要向服务器发出很多请求拉取数据。
重启主机时,tomcat也接着重启,部署在tomcat的后端项目也重启。如果在重启的过程中,重启还没完成的情况下,负载均衡的健康监测向index.html页面发出访问请求时,在阶段,页面的还没加载完成的情况下就跳转到了主界面。而主界面请求的数据,由于后端项目还没启动完成,请求自然失败。这时健康监测自然就失败了。

解决思路:
设置负载均衡的健康监测页面的路径,设置为一个空的页面:
比如SLBhealthTest.html页面内容其实是空的,放在与index.html同级目录下,专门用于健康监测的访问:




    
    





设置一下健康监测的路径:


阿里云负载均衡监听端口异常的分析_第2张图片
image.png

这样健康监测就没问题了,负载均衡的异常也就消失了。

你可能感兴趣的:(阿里云负载均衡监听端口异常的分析)