HAProxy安装配置SSL
Posted 运维网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HAProxy安装配置SSL相关的知识,希望对你有一定的参考价值。
前沿
同时自己签发了ssl证书:查看详看今天发布的第二篇文章“Linux下创建配置SSL证书”。
注:Haproxy 版本需要在1.5以上才支持SSL
一、现有环境
通过HAproxy做代理负载均衡,Varnish做缓存,实现动静分离,此文只介绍HAproxy与SSL的简要结合配置。后期再介绍HAproxy与Varnish缓存实现动静分离,图先贴出来。
二、haproxy代理ssl模式
haproxy 代理 ssl 有两种方式
1、haproxy 本身提供ssl 证书,后面的web 服务器走正常的http (由于各种原因这里采用此方式,此方式也是偷懒方式,比较简单方便)
2、haproxy 本身只提供代理,后面的web服务器https
第一种是我们选择的模式,在haproxy这里设定SSL,这样我们可以继续使用七层负载均衡。SSL连接终止在负载均衡器haproxy ----->解码SSL连接并发送非加密连接到后端应用IIS/Tomcat等,这意味着负载均衡器负责解码SSL连接,这与SSL穿透相反,它是直接向代理服务器发送SSL连接的。
有两种策略的组合做法,那就是第三种,SSL连接在负载均衡器处终止,按需求调整,然后作为新的SSL连接代理到后台服务器。这可能会提供最大的安全性和发送客户端信息的能力。这样做的代价是更多的CPU能耗和稍复杂一点的配置。
选择哪个策略取决于你及应用的需求。SSL终端为我所见过最典型的策略,但SSL穿透可能会更安全。
第一种方式
1、下载程序包
配置参数:
global
tune.ssl.default-dh-param 2048
#修改默认使用2048bit加密,不设置会有警告
frontend http-in
bind *:80
bind *:443 ssl crt /usr/local/haproxy/ssl/servername.pem
mode http
option httpclose
option forwardfor reqadd X-Forwarded-Proto:\ https
# http和https并存
redirect scheme https if !{ ssl_fc }
# 开启后,http会直接跳转至https
default_backend web_server
注意:这里的pem 文件是下面两个文件合并而成:
cat servername.crt servername.key | tee servername.pem
配置启动脚本:
#cd /usr/local/src/haproxy-1.9.4
cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
cp /usr/local/haproxy/sbin/haproxy /usr/local/sbin
cp examples/haproxy.init /etc/init.d/haproxy
# 修改启动脚本(可能会报错)为如下
vi /etc/init.d/haproxy
26行 [[ ${NETWORKING} = "no" ]] && exit 0 #有一个是语法
37行 CFG=/usr/local/$BASENAME/etc/$BASENAME.cfg #如果不修改默认读取/etc/haproxy的配置文件
启动报错:
[root@HAProxy etc]# ../sbin/haproxy -f haproxy.cfg
[ALERT] 290/095154 (61574) : [../sbin/haproxy.main()] Cannot chroot1(/var/lib/haproxy).
解决方案:
[root@HAProxy etc]# mkdir /var/lib/haproxy
[root@HAProxy etc]# chown -R haproxy:haproxy /var/lib/haproxy/
[root@HAProxy ~]# systemctl restart haproxy
Failed to restart haproxy.service: Unit not found.
解决方案:
/etc/init.d/haproxy 启动文件有问题,从没问题的机器拷贝过来一份。
[root@HAProxy init.d]# systemctl restart haproxy.service
Warning: haproxy.service changed on disk. Run 'systemctl daemon-reload' to reload units.
解决方案:
执行下即可 systemctl daemon-reload
第二种方式
不需要重新编译支持ssl,简单方便。需要后面的web服务器配置好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 s1 192.168.0.47:443
server s2 192.168.0.49:443
注意:这种模式下mode 必须是tcp 模式
三、配置说明
这一行要加,要不然reload会警告
tune.ssl.default-dh-param 2048
保留80,同时支持443 ssl,后面指定证书文件
redirect scheme https if !{ ssl_fc }
这一行是仅支持ssl,效果是:访问80端口是自动跳转到443的ssl
这是针对node生效,如果想全局使用的话,可以把这句话添加到frontend下
这是针对node生效,如果想全局使用的话,可以把这句话添加到frontend下
以上是关于HAProxy安装配置SSL的主要内容,如果未能解决你的问题,请参考以下文章