asp.net-mvc - 识别 AWS 负载均衡器 TCP 健康检查请求

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

我们管理一个托管在两台 AWS 机器上的 .net mvc 应用程序。 AWS 负载均衡器管理到每台机器的流量。负载均衡器配置为每 30 秒对每台机器执行一次健康检查。它通过对端口 80 的 TCP 请求来执行此操作。

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

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

最佳答案

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

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

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

关于asp.net-mvc - 识别 AWS 负载均衡器 TCP 健康检查请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386825/

相关文章:

c# - 为什么 EF 导航属性返回 null?

c# - 从 View 将字符串传递给 Controller ​​/操作

amazon-web-services - Kubernetes 上的入口资源与 NGINX 入口 Controller

amazon-web-services - 如何使用vscode AWS扩展名编辑Lambda(GO)

amazon-web-services - AWS Lambda 的开发环境如何搭建?

go - 如何在GO中测试TCP断开连接

JavaScript 未触发 Controller 中的方法

c# - 如何正确实现其他实体对身份用户的引用?

java - 基于wireshark网络嗅探器分析java.io.IOException

c - Linux TCP 服务器,每 X 秒向几个客户端发送 RAW 数据