HAProxy 如何配置 SSL
更新时间:2024-03-07 19:06:53
PDF
项目背景
由于 HTTP 协议以明文方式发送请求,而部分业务需要进行数据加密传输,使用 SSL/TLS 来加密数据包,能够很好的保护数据的隐私性和完整性。
HAProxy 是一款可实现负载均衡的优秀软件,它可用于 TCP 代理、HTTP 反向代理、SSL 终结、规范 TCP、HTTP 连接等等。本文中主要介绍通过 HAProxy 反向代理实现负载均衡,并确保连接基于 SSL/TLS 安全加密。HAProxy 更多应用详见 HAProxy官方文档。
准备事项
-
主机已安装 HAProxy。
-
已申请并签发了 SSL 证书,如没有证书,请购买 SSL 证书。
-
申请 SSL 证书时绑定的域名已解析到服务器 IP。
-
后端可正常访问。
部署步骤
HAProxy 代理 SSL 有两种方式。
-
HAProxy 本身绑定 SSL 证书,后面的 Web 服务器走正常的 HTTP ,这种方式 HAProxy 需要支持 SSL。
-
HAProxy 本身只提供反向代理,后面的 Web 服务器走 HTTPS,这种方式 HAProxy 不需要支持 SSL。
方式一:HAProxy 绑定 SSL 证书:
-
查看已安装的 HAProxy 是否支持 SSL:
-
执行一下命令
haproxy -vv
-
找到
haproxy
命令源文件,执行如下命令:[root@i-3d6dbe9x sbin]# ldd haproxy | grep ssl libssl.so.10 => /lib64/libssl.so.10 (0x00007f99008a3000)
如不支持,需重新编译安装:
make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz make install [root@localhost haproxy]# ldd haproxy | grep ssl libssl.so.10 => /lib64/libssl.so.10 (0x00007f5ab8264000)
注意 TAGET
值为内核版本,使用uname -r
查看,2.6 以上的都用 linux26。
-
-
下载证书,并上传到云服务器,将证书私钥合并处理。
[root@i-3d6dbe9x cert]# ls www.linuxcamp.club.key www.linuxcamp.club.pem [root@i-3d6dbe9x cert]# cat www.linuxcamp.club.pem www.linuxcamp.club.key | tee linuxcamp.pem
-
修改
haproxy.cfg
配置文件。global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats tune.ssl.default-dh-param 2048 ## 修改默认使用 2048bit 加密,不设置会有警告 #--------------------------------------------------------------------- defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend weblb bind *:80 bind *:443 ssl crt /etc/haproxy/cert/linuxcamp.pem ## 绑定私钥 redirect scheme https if !{ ssl_fc } ## 将 http 请求跳转到 https acl is_http hdr_beg(host) www.linuxcamp.club ## 添加 acl 规则 use_backend web if is_http ## 指定后端 #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend web ## 后端 balance roundrobin ## 负载方式:轮询 server web1 192.168.0.2:80 maxconn 1024 check inter 2000 rise 2 fall 3 server web2 192.168.0.200:80 maxconn 1024 check inter 2000 rise 2 fall 3 # maxconn 最大连接数 check inter 检测后端可用性频率:2s rise 2 2次正确可用 fall 3 三次失败不可用
方式二:HAProxy 代理 SSL 请求
-
后端绑定好 SSL 证书,可参考 Apache 配置 SSL、Nginx 配置 SSL。
frontend https_frontend bind *:443 mode tcp default_backend web_server backend web_server mode tcp balance roundrobin stick-table type ip size 200k expire 30m stick on src server web1 192.168.0.2:443 maxconn 1024 check inter 2000 rise 2 fall 3 server web2 192.168.0.200:443 maxconn 1024 check inter 2000 rise 2 fall 3
注意 这种模式下 mode 必须是 tcp 模式,经测试 frontend 采用 mode tcp 时,只认可 default_backend 这一个后端,无法使用 acl。