识别AWS负载均衡器TCP健康检查请求

3
我们管理一款托管在两台AWS服务器上的.net mvc应用程序。 AWS负载均衡器管理每台机器的流量。 负载均衡器被配置为每30秒对每台机器执行健康检查。 它通过TCP请求端口80来执行此操作。
该应用程序期望每个请求背后都是人类,因此健康检查会导致一些副作用,例如向数据库进行不必要的写入和膨胀的日志文件。 健康检查请求的特征是HttpContext.Request.ServerVariables属性中只有一个键值对:“Host:mysite.com”。
该应用程序应如何最好地识别此健康检查请求,以便它可以以不造成任何副作用的方式进行响应? 我想到了ActionFilter,但是否有比检查缺少服务器变量更精确隔离请求的方法?
2个回答

4
在我的应用程序中,我只是切换到了AWS的http检查,并设置了一个“Heartbeat”控制器和一个Index操作; 没有逻辑,但当AWS命中/Heartbeat时返回200。默认情况下,您的IIS日志会捕获此请求;您的应用程序基础架构在您的问题中没有概述,但在我的情况下,操作中缺少任何逻辑就足够了。
另外,实现自己的IHttpModule也是一个选择。在这里,您处于原始的HttpApplication级别,因此此时不涉及MVC管道。我在AWS托管的应用程序中使用它来强制执行https重定向,方法是通过查找“X-Forwarded-Proto”头部信息。 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/gs-ec2classic.html#ConfigureHealthCheck

不想改变健康检查配置,所以选择了HttpModule选项。谢谢! - Nick

2
如果有人在2018年寻找这个(就像我刚刚做的那样),AWS ELB健康检查请求现在具有标题"User-Agent=ELB-HealthChecker/2.0"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接