Haproxy ssl 重定向握手失败

Jam*_*gan 5 ssl redirect haproxy

我有使用 http 和 https 的 haproxy v1.5.4。我将 *:80 & :*443 绑定到相同的前端并使用相同的 acl。

我想创建一个 http -> https 重定向

frontend http-in
    bind *:80
    bind *:443 ssl crt /etc/pki/tls/certs/...

    ...

    acl is_office path_beg /office
    http-request redirect scheme https if !{ ssl_fc } is_office

    use_backend office if is_office
Run Code Online (Sandbox Code Playgroud)

这引起

10.XXXXX:36909 [16/Dec/2015:17:23:07.678] http-in/2: SSL handshake failure
Run Code Online (Sandbox Code Playgroud)

当我通过 http 访问时(期待重定向)

如果我通过 https 访问,那么它会正确地访问后端并通过 443 代理通过服务。

backend office
  balance roundrobin
  server backbone-daily 10.XXXXXX:443 ssl check verify none
Run Code Online (Sandbox Code Playgroud)

自签名证书无需重定向即可验证和工作。感觉就像我在重定向阶段遗漏了一些东西。

非常感谢任何帮助

ala*_*n.s 1

由于我们使用带有 OPNsense 的 HAProxy 插件,该插件只有 GUI,因此我无法给出包含工作代码的答案。不过,我可以回顾一下最终使我们成功的步骤。

  1. 照常设置映射规则
  2. 设置规则 HTTP_REDIRECT 不带任何条件但使用函数http-request redirect scheme https
  3. 创建两个公共服务,一个用于443端口,一个用于80端口
  4. 使用 SSL 卸载和映射规则设置 443 的公共服务
  5. 设置 80 的公共服务,不使用SSL 卸载,仅使用 HTTP_REDIRECT 规则

我怀疑这会转化为类似这样的代码:

frontend http-in
    bind *:443 ssl crt /etc/pki/tls/certs/...
    use_backend office if is_office

frontend no-ssl-http-in
    bind *:80
    http-request redirect scheme https
Run Code Online (Sandbox Code Playgroud)

希望这对仍在寻找解决方案的人有所帮助。