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模式

haproxy 代理 ssl 有两种方式

1、haproxy 本身提供ssl 证书,后面的web 服务器走正常的http (由于各种原因这里采用此方式,此方式也是偷懒方式,比较简单方便)

2、haproxy 本身只提供代理,后面的web服务器https

HAProxy安装配置SSL


  • 第一种是我们选择的模式,在haproxy这里设定SSL,这样我们可以继续使用七层负载均衡。SSL连接终止在负载均衡器haproxy ----->解码SSL连接并发送非加密连接到后端应用IIS/Tomcat等,这意味着负载均衡器负责解码SSL连接,这与SSL穿透相反,它是直接向代理服务器发送SSL连接的。

  • 有两种策略的组合做法,那就是第三种,SSL连接在负载均衡器处终止,按需求调整,然后作为新的SSL连接代理到后台服务器。这可能会提供最大的安全性和发送客户端信息的能力。这样做的代价是更多的CPU能耗和稍复杂一点的配置。

  • 选择哪个策略取决于你及应用的需求。SSL终端为我所见过最典型的策略,但SSL穿透可能会更安全。


第一种方式

1、下载程序包

# wget https://www.haproxy.org/download/1.9/src/haproxy-1.9.4.tar.gz
# tar xvf haproxy-1.9.4.tar.gz -C /usr/local/src
#cd /usr/local/src/haproxy-1.9.4

2、编译安装,开启支持SSL
# yum install -y openssl openssl-devel
# uname -a
# make TARGET=linux31 USE_OPENSSL=1 ADDLIB=-lz PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy
# ldd haproxy | grep ssl libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fb0485e5000)


配置参数:

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

HAProxy安装配置SSL

保留80,同时支持443 ssl,后面指定证书文件

HAProxy安装配置SSL

redirect scheme https if !{ ssl_fc }

这一行是仅支持ssl,效果是:访问80端口是自动跳转到443的ssl

这是针对node生效,如果想全局使用的话,可以把这句话添加到frontend下

HAProxy安装配置SSL

这是针对node生效,如果想全局使用的话,可以把这句话添加到frontend下

以上是关于HAProxy安装配置SSL的主要内容,如果未能解决你的问题,请参考以下文章

HAproxy配置

haproxy服务器本身只提供代理,没有ssl证书吗?

haproxy安装配置及haproxy+keepalived配置

haproxy ssl 配置方式

haproxy ssl 配置方式

Haproxy支持SSL配置