asp.net mvC语言 识别AWS负载平衡器TCP运行状况检查请求



我们管理一个托管在两台AWS机器上的。net mvc应用程序。AWS负载平衡器管理到每台机器的流量。负载平衡器配置为每30秒对每台计算机执行一次运行状况检查。它通过向端口80发出TCP请求来完成此操作。

应用程序期望每个请求背后都有一个人,因此Health Check会产生副作用,例如对数据库进行不必要的写入和膨胀的日志文件。健康检查请求的迹象是HttpContext.Request.ServerVariables属性中只有一个键值对:"Host: mysite.com"

应用程序应该如何最好地识别此运行状况检查请求,以便它能够以不产生副作用的方式进行响应?我在想ActionFilter,但有没有更准确的方法来隔离请求,而不是检查缺乏服务器变量?

在我的应用程序中,我只是切换到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重定向。

如果有人在2018年寻找这个(就像我一样),AWS ELB健康检查请求现在有一个标题"User-Agent=ELB- healthchecker/2.0"

最新更新