HAProxy将httpredirect到https,用于没有SSL终止的多个域名

我正在使用HAProxy将stream量redirect到本地networking中的不同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被redirect到HTTPS。 当我使用:

 redirect scheme https if !{ ssl_fc } 

在HAProxyconfiguration的HTTP前端部分,我将所有的请求redirect到默认的后端,所以如果请求从redirect schemeredirect,上述的acl规则将被忽略。

这个问题有一个答案 ,就是如何通过SSL终止,SSL在HAProxy级别被剥离。

我的问题是 – HTTPS的HTTPredirect可能,同时保留传递(模式tcp)?

我有的前端和后端部分的完整configuration是在这个要点 。

在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 

其中/etc/ssl/haproxy.pem包含您要托pipe的所有域的证书,或包含它们的通配证书。

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