我们管理托管在两台AWS机器上的.net mvc应用程序。 AWS Load Balancer管理每台计算机的流量。 Load Balancer配置为每30秒对每台计算机执行一次运行状况检查。它通过端口80的TCP请求来执行此操作。
应用程序期望每个请求后面都是人,因此运行状况检查会导致副作用,例如对数据库的不必要写入和膨胀的日志文件。健康检查请求的标志是HttpContext.Request.ServerVariables
属性中只有一个键值对:"主机:mysite.com"
应用程序应如何最好地识别此运行状况检查请求,以便它能够以不会产生副作用的方式进行响应?我在想ActionFilter
但除了检查缺少服务器变量之外,还有更准确的隔离请求的方法吗?
答案 0 :(得分:3)
在我的应用程序中,我只是切换到AWS http检查并设置一个带有Index操作的“Heartbeat”控制器;没有逻辑,但当AWS命中/ Heartbeat时它返回了200。默认情况下,您的IIS日志将捕获此请求;您的应用程序基础结构未在您的问题中列出,但在我的情况下,操作中缺少任何逻辑就足够了。
但是,实现自己的IHttpModule是另一种选择。您现在处于原始HttpApplication级别,因此此时您不会使用MVC管道。我已经将它用于(除其他事项外),通过查找“X-Forwarded-Proto”标题强制我在AWS托管的应用程序中进行https重定向。
答案 1 :(得分:2)
如果有人会在2018年寻找这个(就像我以前一样),则AWS ELB健康检查请求现在具有标头“ User-Agent = ELB-HealthChecker / 2.0”