我有一个HAProxy路由HTTPS没有终止使用SNI。
该configuration类似于以下内容:
frontend ft_ssl_vip bind 0.0.0.0:5000 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if { req.ssl_hello_type 1 } default_backend bk_ssl_default # Using SNI to take routing decision backend bk_ssl_default mode tcp acl application_1 req.ssl_sni -i foo.example.com acl application_2 req.ssl_sni -i bar.example.com use-server server1 if application_1 use-server server2 if application_2 use-server server3 if !application_1 !application_2 option ssl-hello-chk server server1 127.0.0.1:777 server server2 127.0.0.1:778 server server3 127.0.0.1:779
我还需要通过相同的端口(5000)路由HTTPstream量。
如何通过SNI修改我的configuration以适应HTTP和HTTPS,而不通过同一端口终止?
编辑
我离得更近了。 HTTPS路由似乎正在工作,但由于某种原因,HTTP后端acl与该域不匹配。
这是我在哪里:
frontend app bind 0.0.0.0:5000 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if HTTP tcp-request content accept if { req.ssl_hello_type 1 } use_backend testing_http if HTTP default_backend testing_https backend testing_https mode tcp acl app_2 req.ssl_sni -i foo.bar.com use-server server2 if app_2 use-server default if !app_2 server server2 127.0.0.1:777 server default 127.0.0.1:443 backend testing_http mode http acl app_2 hdr(host) -i foo.bar.com use-server server2 if app_2 use-server default if !app_2 server server2 127.0.0.1:777 server default 127.0.0.1:80
我正在发表一个自己的问题的答案,因为我已经能够把一些东西拼凑在一起,这个问题似乎没有任何兴趣。 如果它出现在谷歌search,这应该有助于某人。
以下似乎为我工作到目前为止:
frontend app bind 0.0.0.0:5000 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if HTTP tcp-request content accept if { req.ssl_hello_type 1 } use_backend testing_http if HTTP default_backend testing_https backend testing_https mode tcp acl app_2 req.ssl_sni -i foo.bar.com use-server server2 if app_2 use-server default if !app_2 server server2 127.0.0.1:777 server default serverfault.com:443 backend testing_http mode http acl app_2 hdr_dom(host) -i foo.bar.com use-server server2 if app_2 use-server default if !app_2 server server2 127.0.0.1:777 server default www.example.com:80
要理解的重要部分 – 前端检查请求是否为HTTP。 如果不是,则检查是否是SNI请求。 否则,它不接受。
另一个绊倒我的部分是http后端的主机匹配。 使用与hdr_dom而不是hdr进行域匹配非常重要,以便string中手动指定的端口不会中断acl。
最困难的部分是前端的tcp模式对http没有帮助。 而且由于http后端无法login,你不会得到任何的http信息。