Haproxy TLS 健康检查自定义成功代码

Haproxy TLS 健康检查自定义成功代码

我正在尝试为特定后端配置 haproxy 健康检查,以便将 403 错误视为“成功”响应。我尝试将“http-check expect status 403”和“option httpchk”添加到后端,但当我将“check”添加到服务器行并重新启动 haproxy 时,我收到一条错误消息,提示后端“没有可用的服务器”。日志包含错误“Layer6 无效响应,信息:'SSL 握手失败'”。我遗漏了什么?

我使用“ssl verify none”验证了证书本身没有问题。如果我禁用健康检查或禁用 SSL,这可以正常工作,但我无法让它们协同工作。

我正在使用 haproxy 1.6 版本。

frontend example_https
    mode http
    option httplog

    bind *:443 ssl crt app-ssl.pem no-sslv3 no-tlsv10

    tcp-request inspect-delay 500ms
    tcp-request content accept if { req.ssl_hello_type 1 }

    option http-server-close
    reqadd X-Forwarded-Proto:\ https

    acl is_some-backend url_beg -i /some-backend
    use_backend example_some-backend if is_some-backend


backend example_some-backend
    mode http
    option httplog
    option httpchk
    http-request redirect scheme https if ! { ssl_fc }
    http-request set-path %[path,regsub(^/some-backend/?,/)]
    http-check expect status 403
    server elb some-backend-dev.example.com:443 resolvers dns resolve-prefer ipv4 ssl ca-file ca-certificates.crt check fall 3 rise 2 inter 1000

答案1

我最终通过使用“option tcp-check”并在服务器行中明确指定“check port 443”来实现这一点。这样,请求本身仍然使用 SSL,但健康检查使用简单的 TCP 检查。即使已经在域名后指定了端口,也必须明确设置健康检查端口,否则,即使 tcp-check 已指定为选项,检查也会默认为服务器设置并尝试执行第 6 层检查。

相关内容