HAProxy 无需 SSL 终止即可将多个域名的 http 重定向到 https

Max*_*lov 4 haproxy

我正在使用 HAProxy 将流量重定向到本地网络中的不同 Web 服务器。

如果没有启用 SSL,我可以像这样根据主机名进行路由(在前端部分):

acl is_local hdr_end(host) -i mirror.skbx.co
acl is_kiev  hdr_end(host) -i kiev.skbx.co

use_backend kiev if is_kiev
default_backend wwwlocalbackend
Run Code Online (Sandbox Code Playgroud)

一旦我启用 SSL,一切都会通过 SSL 传递模式在 TCP 模式下工作。

但我还需要确保 HTTP 重定向到 HTTPS。当我使用:

redirect scheme https if !{ ssl_fc }
Run Code Online (Sandbox Code Playgroud)

在 HAProxy 配置的 HTTP 前端部分,我将所有请求重定向到默认后端,因此如果请求从redirect scheme.

这个问题有一个关于如何通过 SSL Termination 使其工作的答案,其中 SSL 在 HAProxy 级别被剥离。

我的问题是 - 是否可以在保留直通(模式 tcp)的同时从 HTTP 重定向到 HTTPS?

我拥有的前端和后端部分的完整配置在这个要点中

Gre*_*egL 8

在 TCP 模式下,HAproxy 实际上甚至不会终止 SSL,它只是将数据包传递到后端。由于https-frontend无法解码以下行中的标头,它只是将所有内容传递给default_backend.

您必须在线指定一个证书bind并在mode http.

例如:

frontend http-frontend
    bind 10.1.0.4:80

    redirect scheme https if !{ ssl_fc }

frontend https-frontend
    bind 10.1.0.4:443 ssl crt /etc/ssl/haproxy.pem

    option httplog
    mode http

    acl is_local hdr_end(host) -i mirror.skbx.co
    acl is_kiev  hdr_end(host) -i kiev.skbx.co

    use_backend kiev if is_kiev
    default_backend wwwlocalbackend

backend wwwlocalbackend
    mode http
    server 1-www 127.0.0.1:443

backend kiev
    mode http
    server 1-www 10.8.0.6:443
Run Code Online (Sandbox Code Playgroud)

Where/etc/ssl/haproxy.pem包含您要托管的所有域的证书,或涵盖它们的通配符证书。

如果每个域都有单独的证书,则需要按照frontend ft_test您发布的问题中接受的答案进行配置在 Haproxy 中配置多个 SSL 证书)。