我正在使用 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
一旦我启用 SSL,一切都通过 SSL 模式在 TCP 模式下工作。
但我还需要确保将 HTTP 重定向到 HTTPS。当我使用:
redirect scheme https if !{ ssl_fc }
在我的 HAProxy 配置的 HTTP 前端部分中,我将所有请求重定向到默认后端,因此如果请求从redirect scheme
.
这个问题有一个关于如何通过 SSL Termination 使其工作的答案,其中 SSL 在 HAProxy 级别被剥离。
我的问题是 - 在保持直通(模式 tcp)的同时可以进行 HTTP 到 HTTPS 重定向吗?
我拥有的前端和后端部分的完整配置在这个 gist中。
在 TCP 模式下,HAproxy 实际上甚至不会终止 SSL,它只是将数据包传递到后端。由于
https-frontend
无法解码以下行中的标头,它只是将所有内容传递给default_backend
.您必须
bind
在线上指定一个证书并在mode http
.例如:
其中
/etc/ssl/haproxy.pem
包含您要托管的所有域的证书,或涵盖它们的通配符证书。如果每个域都有单独的证书,则需要按照您发布的问题(在 Haproxy 中配置多个 SSL 证书
frontend ft_test
)中接受的答案中的配置进行操作。