我们管理一个托管在两台 AWS 机器上的 .net mvc 应用程序。 AWS 负载均衡器管理到每台机器的流量。负载均衡器配置为每 30 秒对每台机器执行一次健康检查。它通过对端口 80 的 TCP 请求来执行此操作。
应用程序期望每个请求背后都有一个人,因此健康检查会导致副作用,例如不必要的数据库写入和膨胀的日志文件。健康检查请求的标志是 HttpContext.Request.ServerVariables
属性中只有一个键值对:“Host: mysite.com”
应用程序应该如何最好地识别此健康检查请求,以便它能够以不会产生副作用的方式进行响应?我在考虑 ActionFilter
,但除了检查是否缺少服务器变量之外,还有更准确的方法来隔离请求吗?
最佳答案
在我的应用程序中,我只是切换到 AWS http 检查并设置了一个带有索引操作的“心跳” Controller ;没有逻辑,但当 AWS 命中/Heartbeat 时它返回 200。默认情况下,您的 IIS 日志将捕获此请求;您的问题中没有概述您的应用程序基础架构,但就我而言,操作中缺少任何逻辑就足够了。
但是,实现您自己的 IHttpModule 是这里的另一种选择。您在此处处于原始 HttpApplication 级别,因此您此时不使用 MVC 管道。我已经将它用于(除其他外)通过查找“X-Forwarded-Proto” header 强制在我的 AWS 托管应用程序中进行 https 重定向。
关于asp.net-mvc - 识别 AWS 负载均衡器 TCP 健康检查请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386825/