这里是东西:
- 我们已经实现了一个C ++的RESTful API服务器,内置的HTTP解析器和像Apache还是那种没有任何标准的HTTP服务器
- 它一直在使用亚马逊结构几个月,同时使用普通和SSL通信,并没有任何问题已经确定,与亚马逊基础结构
- 我们正在部署使用Amazon ELB我们的第一个后端
- 亚马逊ELB有一个可定制健康检查系统,而且还为自动之一,说明这里
- 我们没有发现由健康检查系统发送什么数据的文件
- 插座上的后端简单挂起读指令,并最终关闭连接
我不是在寻找一个因为后端不是基于标准的Web服务器上的问题的解决方案,只是如果有人知道什么样的信息正在被ELB健康检查系统发出的,因为我们没有发现任何关于此文档,任何地方。
帮助深表感谢。 谢谢。
亚马逊ELB有一个可定制健康检查系统,而且还为自动之一,说明这里
随着定制你大概是指通过AWS管理控制台健康检查配置(见配置健康检查设置 ),或通过API(见ConfigureHealthCheck )。
通过以这种方式配置的健康检查的要求在所述的场所概述的目标 健康检查的数据类型的文件:
指定要检查的实例。 该协议是TCP,HTTP,HTTPS或SSL。 有效端口的范围是一(1)到65535。
注意
TCP是默认的,指定为TCP:端口对,如“TCP:5000”。 在这种情况下,健康检查只是试图打开指定端口的TCP连接到该实例。 未能在配置的超时连接被认为是不健康的。
SSL也指定为SSL:端口对,例如,SSL:5000。
对于HTTP或HTTPS协议,情况就不同了。 你必须在字符串中包含一个ping路径。 HTTP被指定为HTTP:端口; /; PathToPing; 分组,例如 “HTTP:80 /天气/美国/ WA /西雅图”。 在这种情况下,一个HTTP GET请求被发送到该实例的给定端口和路径上。 比超时期限内“200 OK”之外的任何答案被认为是不健康的。
的HTTP平目标的总长度需要1024 16位Unicode字符或更少。
[重点煤矿]
有了自动您大概指的是内段的原因描述的健康检查为什么在API和控制台中显示的网址不同的健康检查URL? :
除了配置为负载平衡器的健康检查,第二健康检查由服务执行 ,以防止造成实例潜在的副作用而不被注销而终止。 要执行此项检查,负载均衡器打开一个健康检查配置为使用同一端口上的TCP连接,然后将健康检查完成后,关闭连接。 [重点煤矿]
该段解阐明了有效载荷这里是零,即,它是类似于用于上述可配置的健康检查中所述的非HTTP / HTTPS方法:
因为它没有任何数据发送到后端实例这种额外的健康检查不会影响应用程序的性能。 您不能禁用或关闭此健康检查。
摘要/解决方案
假设你的RESTful API服务器,具有内置的HTTP解析器应该服务于HTTP只事实上,你将需要处理的两个健康检查:
- 您配置自己作为一个HTTP第一招:端口; /; PathToPing -您会收到一个
HTTP GET
请求,并必须回答200 OK
被认为是健康的在指定的超时期限内。 - 第二个由服务自动配置 - 健康检查完成后它就会打开如上配置的HTTP端口的TCP连接,将不发送任何数据,然后关闭连接。
总之,似乎你的服务器可能已经表现完全正常,你只是在第2健康检查的行为激怒了 - 不ELB实际上考虑你的服务器是不健康的?
据我知道这只是一个HTTP GET请求寻找一个200 OK HTTP响应。
文章来源: What does the Amazon ELB automatic health check do and what does it expect?