代理主机上名为 /check.txt 的文件听起来是理所当然的健康检查目标。问题在于,Squid 的显式正向监听器并不是提供该主机文档根目录的普通网站。

像 HEAD /check.txt HTTP/1.1 这样的源站式请求,缺少了普通 HTTP 请求经由正向代理时所应携带的绝对目标。视配置而定,它可能被拒绝,也可能被另一个本地服务接管。两种结果能告诉你的,都少于仪表盘所暗示的。

选择你真正需要保障可用的服务

检查方式有用证据
与代理监听器建立 TCP 连接有可达的进程接受了该连接。
向受控目标发起 CONNECT代理接受了该隧道请求。
经由代理获取 HTTP 内容所选的请求路径能够返回预期响应。

对于第三种情况,请求需要指定目标,例如:

HEAD http://probe.example.internal/proxy-ready HTTP/1.1
Host: probe.example.internal

主机名只是示例。请使用代理能够解析、且被有意允许访问的受控端点。HAProxy 的 http-check send 支持指定方法、URI、版本和请求头;请显式配置该请求,而不是原封不动地照搬源站服务器示例。

HEAD 可以检查响应状态和响应头,却无法校验根本不会被传输的响应体。如果健康检查契约要求校验响应体中的标记,请选用合适的 GET 检查并校验该标记。

涉及代理认证时,请把检查账号与来源限制收得更紧。为了让检查变绿而让整个监听器免于认证,等于改变了被保护的服务本身。

最后,要确定探测失败时应当摘除什么。受控源站故障可能让所有代理的转发检查同时失败。这或许正是你想测量的依赖关系,也可能正是要把监听器健康与端到端可用性拆成两个信号的理由。

相关文章