0

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

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

-TCP 1212 可用性

-TCP 1912 可用性

-HTTP GET 7078 /?

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

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

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

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

4

1 回答 1

2

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

不过,您在此处描述的是主动 健康检查,可让您从流量端口检查不同的端口、断言 HTTP 状态、标头值甚至正文内容。不幸的是,在你面前晃来晃去,这些只能作为 NGINX 商业订阅的一部分提供,我猜这不是你想要的。

如果你确实需要这种主动的健康检查,你仍然可以在 NGINX 之外进行。一种方法可能是:

  1. 将您的上游放在单独的 conf 中,并将include其中之一放在您需要的地方
  2. 使用ncat和/或curl在每分钟的 cron 作业中执行对您而言重要的测试
  3. 如果这些测试失败,请关闭上游配置,并告诉 NGINX 进行零停机重新加载

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

于 2020-08-12T19:29:01.150 回答