NGINX路由基于服务器200响应失败

NGINX routing based on server 200 response failures

我的目标是在配置中配置 nginx 的流 object(s) 以在某些健康检查失败的情况下将请求路由到备份上游 (2/3)

健康检查虽然有点具体,但我认为应该不是问题:

-TCP 1212 可用性

-TCP 1912 可用性

-7078 上的 HTTP GET /?

-响应应该是 200,如果我能以某种方式得到 body 来检查它是否符合预期,那就更好了!

如果这些检查在一个上游“集群”上失败,可以这么说,我想将请求路由到另一个相同的集群,就像备份一样。

我要解决的问题在于,服务器实际上相距半个世界,因此通过一台服务器进行负载平衡会导致与等待它失败时相同的延迟。因此,虽然负载均衡器最终会有“路由”行为,但响应时间将是不可接受的。

有没有办法在 NGINX 配置中做到这一点,还是我把它分散得太薄了?

NGINX upstream module 将为您进行被动 健康检查,这意味着它将对连接失败做出反应,并根据需要选择切换到备份服务器。在某种程度上,这对你来说可能就足够了。

你在这里描述的是 active health checks 让你从流量端口检查不同的端口,断言 HTTP 状态,header 值甚至 body 内容。不幸的是,在你面前晃来晃去,这些只能作为 NGINX 商业订阅的一部分提供,我猜这不是你要找的。

如果您确实需要那种 pro-active 健康检查,您仍然可以从 NGINX 外部进行。一种方法可能是:

  1. 将你的上游放在单独的 confs 中,include 其中一个放在你需要的地方
  2. 在 every-minute cron 作业中使用 ncat and/or curl 来执行对您重要的测试
  3. 如果这些测试失败,关闭上游 confs,并告诉 NGINX 做一个 zero-downtime 重新加载

您可以通过快速切换 confs mv 重命名正确的以匹配 include,您不必重写任何内容。