识别AWS负载均衡器TCP运行状况检查请求

时间:2014-03-13 17:48:13

标签: asp.net-mvc amazon-web-services tcp load-balancing

我们管理托管在两台AWS机器上的.net mvc应用程序。 AWS Load Balancer管理每台计算机的流量。 Load Balancer配置为每30秒对每台计算机执行一次运行状况检查。它通过端口80的TCP请求来执行此操作。

应用程序期望每个请求后面都是人,因此运行状况检查会导致副作用,例如对数据库的不必要写入和膨胀的日志文件。健康检查请求的标志是HttpContext.Request.ServerVariables属性中只有一个键值对:"主机:mysite.com"

应用程序应如何最好地识别此运行状况检查请求,以便它能够以不会产生副作用的方式进行响应?我在想ActionFilter但除了检查缺少服务器变量之外,还有更准确的隔离请求的方法吗?

2 个答案:

答案 0 :(得分:3)

在我的应用程序中,我只是切换到AWS http检查并设置一个带有Index操作的“Heartbeat”控制器;没有逻辑,但当AWS命中/ Heartbeat时它返回了200。默认情况下,您的IIS日志将捕获此请求;您的应用程序基础结构未在您的问题中列出,但在我的情况下,操作中缺少任何逻辑就足够了。

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/gs-ec2classic.html#ConfigureHealthCheck

但是,实现自己的IHttpModule是另一种选择。您现在处于原始HttpApplication级别,因此此时您不会使用MVC管道。我已经将它用于(除其他事项外),通过查找“X-Forwarded-Proto”标题强制我在AWS托管的应用程序中进行https重定向。

答案 1 :(得分:2)

如果有人会在2018年寻找这个(就像我以前一样),则AWS ELB健康检查请求现在具有标头“ User-Agent = ELB-HealthChecker / 2.0”