本站所使用的架构可以详细看这里:本站架构

用HAProxy代理多域名HTTPS站点有两种途径:tcp和https,本文分别列出两种方法,我均已测试通过:

安装就不多说了,Debian自带稳定版,一行命令就搞定:

apt-get install haproxy

 

方法一,用TCP连接

这个路子只能针对单一后端节点,或者多节点轮询也可以,但无法区分域名,也就是不太灵活。(我看官方博客提供的TCP+根据域名分流的方法,但很复杂,而且我没测试成功)这个方法的效率最高。

配置:

listen https
bind 0.0.0.0:443
mode tcp
balance roundrobin            
server s1 后端服务器1:443 weight 3 maxconn 10000 check inter 10s
server s2 后端服务器2:443 weight 3 maxconn 10000 check inter 10s
server s3 后端服务器3:443 weight 3 maxconn 10000 check inter 10s

比葫芦画瓢,不用多做解释了

 

方法二,用HTTPS方式

此方法很灵活,可以根据域名分发至不同的服务器,但需要自身多做一次SSL交互,理论上性能略低,但HAProxy的性能再怎么低也比Nginx、Apache之流高出很多很多倍。

看完整配置:

frontend http_server
mode http

bind 0.0.0.0:443 ssl crt /var/www/ca/old.tingtao.org/old.tingtao.org.pem crt /var/www/ca/www.tingtao.org/www.tingtao.org.pem

    use_backend www_tingtao_net if { ssl_fc_sni old.tingtao.org }
    use_backend it_tingtao_net if { ssl_fc_sni www.tingtao.org }


backend www_tingtao_net
  mode http
    server web1 后端服务器1:443 check ssl verify none
    server web2 后端服务器2:443 check ssl verify none

backend it_tingtao_net
  mode http
    server web1 后端服务器1:443 check ssl verify none
    server web2 后端服务器2:443 check ssl verify none

本身不复杂,但网上的中文教程全错,呵呵。略作解释:

 

bind 0.0.0.0:443 ssl crt /var/www/ca/old.tingtao.org/old.tingtao.org.pem crt /var/www/ca/www.tingtao.org/www.tingtao.org.pem

这一行,有多个证书就附加多个进来,也可以更简单的指定一个目录,但路径必须正确,否则出错无法启动的。

 

 

    use_backend www_tingtao_net if { ssl_fc_sni old.tingtao.org }
    use_backend it_tingtao_net if { ssl_fc_sni www.tingtao.org }

这里,根据匹配到的域名选择对应的后端服务器组(也可以用配置语法中的正则),在HAProxy里,不论一个还是多个服务器,都是以“组”的形式出现的

 

 

backend www_tingtao_net
  mode http
    server web1 后端服务器1:443 check ssl verify none
    server web2 后端服务器2:443 check ssl verify none

backend it_tingtao_net
  mode http
    server web1 后端服务器1:443 check ssl verify none
    server web2 后端服务器2:443 check ssl verify none

这里定义对应的后端“组”,也可以加轮询算法、权重什么的参数,我这没必要,各位需要的话自己加上就好了。

 

 

Haproxy本身是一个超高性能的负载均衡软件,官网测试的是用十几年前的古董计算机可以跑满10G带宽,其性能绝非Nginx这种可比的。

PS:我以前的公司用这玩意做前端,承载后面7万左右个网站,用的不过是一个E2200的cpu就足够了,还长时间cpu占用为0,其他的代理软件差距实在太大,没必要对比了。

作者 听涛

《用HAProxy代理多服务器多域名HTTPS站点》有2条评论
  1. 博主你好,你在博文中提到“Haproxy官方博客提供的TCP+根据域名分流的方法"但你没实验生效。可以发下此官方博客的链接吗?我需要去探究下相关的东西

    1. 几年前的东西了,我没保留地址,不过按我现在的观点,已经没多大必要了。如果你有类似需求的话,haproxy和nginx本身全都支持ssl/https,也全都支持上下游串联,适当组合一下就可以。 如果你搞不定这种复杂组合,那么haproxy或者nginx自身作为前端负载节点也可以的,本身性能就足够牛B了,一个节点扛不住就再加一个就行,垃圾机器都能抗几个G带宽的。 提到的那个官方博客的事,细节记不清了,我觉得理论上是可行的,但既然涉及到域名,那么必然运作在非TCP层,也就是说跟这篇文章里的用sni来区分域名的做法其实没什么本质区别。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注