我正在使用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进行操作 。