HAProxy 之 实现https访问

1  概述

 

启用https将使得服务器的性能大大降低,如果后端的服务器压力较大或者性能不够,启用web server上启用https将对服务器造成更大的压力,但是为了安全的考量,启用https将是非常关键的。所以,这里有个折中的方法,当用户到达haproxy这里的访问是在公网环境,通过https进行访问,而从haproxy到达后端服务器属于企业的局域网中,我们认为是相对安全的,所以通过haprxoy服务器上redirect的功能,将客户端访问的请求全部转换为https,同时将该https的请求转换为http请求来访问后端服务器。

2  配置HAProxy支持https协议

 

2.1通过自签名生成证书文件

证书文件为PEM格式,要求把私钥和证书文件放在一起,自签名生成证书文件,用如下命令实现,在HA上配置,RS上不用生成证书文件,后端走HTTP协议

cd /etc/pki/tls/certs/

make /etc/haproxy/haproxy.pem

#以上命令将生成私钥和证书文件都放在一起pem文件,而且直接放置在/etc/haproxy/这个路径下

如果向CA申请的证书文件,需要用如下命令将证书和私钥打包成一份

cat  haproxy.crthaproxy.key > haproxy.pem

2.2支持ssl会话

 

指定证书文件的路径,并重定向80端口到443端口

绑定端口格式

bind *:443 ssl crt  /PATH/TO/SOME_PEM_FILE

例子

bind *:80

bind *:443 ssl crt  /etc/haproxy/haproxy.pem

redirect scheme https if !{ ssl_fc}

redirect当访问80端口时自动跳转到443

2.3  log 记录

向后端log传递用户请求的协议和端口(frontend或backend),方便查看用户访问的端口号,不是必须的配置。以下两个方法二选一

http-request  set-header X-Forwarded-Port %[dst_port]

http-request  add-header X-Forwared-Proto https if {ssl_fc}

set-header设置表示如果存在就覆盖原信息,X-Forwarded-Port是格式的自定义的名字,这里是根据源端口来设置,如源端口是443,就添加为443,当HA收到请求的时候,就会把HA访问后台RS用的端口号转发到后台的服务器

add-header不管原来是否有什么格式,都添加上去,X-Forwared-Proto是格式的名字,是log里定义需要调用的名字,log加上去的内容为https

RS定义log

LogFormat "%h %l %u%t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"  \"%{X-Forwared-Proto} i\"" combined



作者:ghbsunny
链接:https://www.jianshu.com/p/87c290244079
 

你可能感兴趣的:(Linux平台)