haproxy配置基于ssl证书的https负载均衡
本实验全部在haproxy1.5.19版本进行测试通过,经过测试1.7.X及haproxy1.3版本以下haproxy配置参数可能不适用,需要注意版本号。
一、业务要求
现在根据业务的实际需要,有以下几种不同的需求。如下:
1.1 http跳转https
把所有请求http://www.chinasoft.com的地址全部跳转为https//:www.chinasoft.com这个地址
1.2 http与https并存
服务器同时开放http://www.chinasoft.com和https://www.chinasoft.com的访问形式
1.3 服务器环境准备
node1即haproxy所在服务器的处理
安装依赖
yum install -y openssl openssl-devel readline-devel pcre-devel libssl-dev libpcre3
# 下载安装包,
tar zxf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19
useradd -u 188 -r -d /var/lib/haproxy -s /sbin/nologin haproxy
# 加入支持ssl的编译参数
- make TARGET=linux2628 USE_PCRE= USE_OPENSSL= USE_ZLIB= USE_CRYPT_H= USE_LIBCRYPT=
- make install PREFIX=/usr/local/haproxy
- cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
- cp examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
mkdir /etc/haproxy
mkdir /var/lib/haproxy
# 修改启动脚本(可能会报错)为如下
vim /etc/init.d/haproxy
26 [[ ${NETWORKING} = "no" ]] && exit 0
后端web01(192.168.3.200)服务器apache配置,需要配置虚拟主机域名为:www.chinasoft.com否则无法正常处理
- [root@node2 ~]# egrep -v '#|^$' /etc/httpd/conf/httpd.conf
- ServerRoot "/etc/httpd"
- Listen
- Include conf.modules.d/*.conf
- User apache
- Group apache
- ServerAdmin root@localhost
- <Directory />
- Options FollowSymLinks
- AllowOverride none
- Allow from all
- </Directory>
- DocumentRoot "/var/www/html/chinasoft"
- <Directory "/var/www">
- AllowOverride None
- Require all granted
- </Directory>
- <Directory "/var/www/html/chinasoft">
- Options Indexes FollowSymLinks
- AllowOverride None
- Require all granted
- </Directory>
- <IfModule dir_module>
- DirectoryIndex index.php index.html
- </IfModule>
- <Files ".ht*">
- Require all denied
- </Files>
- ErrorLog "logs/error_log"
- LogLevel warn
- <IfModule log_config_module>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- LogFormat "%h %l %u %t \"%r\" %>s %b" common
- <IfModule logio_module>
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
- </IfModule>
- CustomLog "logs/access_log" combined
- </IfModule>
- <IfModule alias_module>
- ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
- </IfModule>
- <Directory "/var/www/cgi-bin">
- AllowOverride None
- Options None
- Require all granted
- </Directory>
- <IfModule mime_module>
- TypesConfig /etc/mime.types
- AddType application/x-compress .Z
- AddType application/x-gzip .gz .tgz
- AddType text/html .shtml
- AddOutputFilter INCLUDES .shtml
- </IfModule>
- AddDefaultCharset UTF-8
- <IfModule mime_magic_module>
- MIMEMagicFile conf/magic
- </IfModule>
- EnableSendfile on
- IncludeOptional conf.d/*.conf
- [root@node2 ~]# cat /etc/httpd/conf.d/vhost.conf
- NameVirtualHost *:8080
- <VirtualHost *:8080>
- DocumentRoot /var/www/html/
- ServerName 192.168.3.200:8080
- </VirtualHost>
- <Directory "/var/www/html/chinasoft/">
- php_admin_value open_basedir "/var/www/html/chinasoft/:/tmp/"
- Options Includes ExecCGI FollowSymLinks
- AllowOverride All
- Order allow,deny
- Allow from all
- </Directory>
- <VirtualHost *:8080>
- DocumentRoot /var/www/html/chinasoft/
- ServerName www.chinasoft.com:8080
- </VirtualHost>
1.4 证书的处理,需要将网站的根证书和key简单的合并在一起:
- cat chinasoft.com.pem chinasoft.com.key | tee chinasoft.pem
否则会报错
'bind *:443' : unable to load SSL private key from PEM file
1.5 域名的指向及处理
将www.chinasoft.com指向haproxy负载均衡器所在的服务器IP地址,此处是192.168.3.198
二、配置haproxy并测试业务需求
现在我们根据业务的需求,我们来配置haproxy一一达到其需求。
2.1 http跳转https配置
http跳转https的haproxy配置文件内容,如下:
- [root@node1 haproxy]# cat /etc/haproxy/haproxy.cfg
- global
- log 127.0.0.1 local3 info
- chroot /var/lib/haproxy
- maxconn 4096
- user haproxy
- group haproxy
- daemon
- stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
- stats timeout 2m
- tune.ssl.default-dh-param 2048
- defaults
- log global
- mode http
- option httplog
- option dontlognull
- option http-server-close
- option forwardfor except 127.0.0.1
- option redispatch
- retries 3
- option redispatch
- maxconn 2000
- timeout http-request 10s
- timeout queue 1m
- timeout connect 10s
- timeout client 1m
- timeout server 1m
- timeout http-keep-alive 10s
- timeout check 10s
- listen admin_stats
- bind 0.0.0.0:1080
- mode http
- option httplog
- maxconn 10
- stats refresh 30s
- stats uri /haproxy?stats
- stats auth admin:admin
- stats hide-version
- frontend weblb
- bind *:80
- acl is_http hdr_beg(host) www.chinasoft.com
- redirect scheme https if !{ ssl_fc }
- bind *:443 ssl crt /etc/haproxy/chinasoft.pem
- use_backend httpserver if is_http
- backend httpserver
- balance source
- server web1 192.168.3.200:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
# 配置好之后先检查语法是否正确
[root@node1 haproxy]# /etc/init.d/haproxy check
Configuration file is valid
在以上配置文件中,需要注意的选项如下:
tune.ssl.default-dh-param 2048因为我们的SSL密钥使用的是2048bit加密,所以在此进行声明。
acl is_http hdr_beg(host) www.chinasoft.com
redirect scheme https if !{ ssl_fc }
bind *:443 ssl crt /etc/haproxy/chinasoft.pem
这三行表示把所有访问www.chinasoft.com这个域名的请求,全部转发到https://www.chinasoft.com这个连接
管理页面
2.2 测试http跳转https
http跳转https配置完毕后,我们选择来测试其跳转。如下:
你会发现在浏览器中,无论你输入的是www.chinasoft.com,还是http://www.chinasoft.com亦或是https://www.chinasoft.com,都会自动跳转到https://www.chinasoft.com。
这样就达到了,把所有的http请求跳转到https的目的。
2.3 http与https并存配置
haproxy要实现http和https并存的话,配置也很简单,只需要把haproxy分别监控不同的端口就行,配置文件如下:
- [root@node1 haproxy]# cat haproxy.cfg
- global
- log 127.0.0.1 local3 info
- chroot /var/lib/haproxy
- maxconn 4096
- user haproxy
- group haproxy
- daemon
- stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
- stats timeout 2m
- tune.ssl.default-dh-param 2048
- defaults
- log global
- mode http
- option httplog
- option dontlognull
- option redispatch
- retries 3
- option redispatch
- maxconn 2000
- timeout connect 10s
- timeout client 1m
- timeout server 1m
- timeout check 10s
- listen admin_stats
- bind 0.0.0.0:1080
- mode http
- option httplog
- maxconn 10
- stats refresh 30s
- stats uri /haproxy?stats
- stats auth admin:admin
- stats hide-version
- frontend weblb
- bind *:80
- acl is_http hdr_beg(host) www.chinasoft.com
- use_backend httpserver if is_http
- backend httpserver
- balance source
- server web1 192.168.3.200:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
- frontend weblb443
- bind *:443 ssl crt /etc/haproxy/chinasoft.pem
- acl is_443 hdr_beg(host) www.chinasoft.com
- use_backend httpserver443 if is_443
- backend httpserver443
- balance source
- server web1 192.168.3.200:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
在以上配置文件中,我们定义了两个前端,一个前端用于监听80端口,也就是http协议。另外一个前端监听443端口,也就是https协议。
此时haproxy会根据客户端请求的协议进行分发,如果发现客户端请求的是http协议,则把该请求分发到监听80端口的前端。如果发现客户端请求的是https协议,则把该请求分发到监听443端口的前端。如此就达到了haproxy让http和https并存的要求。
2.4 测试http与https并存
http与https并存配置完毕后,我们选择来测试其跳转。如下:
通过测试你会发现,在浏览器中如果你输入的是http://www.chinasoft.com或者是www.chinasoft.com都会直接跳转到http://www.chinasoft.com,而输入的是https://www.chinasoft.com,则只会跳转到https://www.chinasoft.com。
如此就到达了,我们业务的要求实现http和https并存。
生产环境配置实例:
- [root@u05mix05 ~]# cat /etc/haproxy/haproxy.cfg
- global
- log 127.0.0.1 local3 info
- chroot /var/lib/haproxy
- maxconn
- user haproxy
- group haproxy
- daemon
- stats socket /var/lib/haproxy/haproxy.sock mode level admin
- stats timeout 2m
- defaults
- log global
- mode http
- option httplog
- option dontlognull
- option http-server-close
- option forwardfor except 127.0.0.1
- option redispatch
- retries
- option redispatch
- maxconn
- timeout http-request 10s
- timeout queue 1m
- timeout connect 10s
- timeout client 1m
- timeout server 1m
- timeout http-keep-alive 10s
- timeout check 10s
- listen admin_stats
- bind 0.0.0.0:
- mode http
- option httplog
- maxconn
- stats refresh 30s
- stats uri /haproxy?stats
- stats auth admin:admin
- stats hide-version
- frontend hs_chinasoft_com
- mode http
- bind *:
- stats uri /haproxy?stats
- default_backend hs_chinasoft_com_backend
- backend hs_chinasoft_com_backend
- option forwardfor header X-REAL-IP
- option httpchk GET /check
- balance roundrobin
- server node1 1.1.1.1: check inter rise fall weight
- frontend hs_chinasoft_info
- mode http
- bind *:
- stats uri /haproxy?stats
- default_backend hs_chinasoft_info_backend
- backend hs_chinasoft_info_backend
- option forwardfor header X-REAL-IP
- option httpchk GET /check
- balance roundrobin
- server node1 1.1.1.1: check inter rise fall weight
- server node2 1.1.1.2: check inter rise fall weight
haproxy配置基于ssl证书的https负载均衡的更多相关文章
- 阿里云域名ssl证书导入aws负载均衡使用
一 .原因 由于公司战略需求,需要将阿里云的服务器迁移到aws,在迁移过程中,我们需要使用的是aws的负载均衡,可以在EC2的控制台 负载平衡位找到负载均衡.根据业务需求我们使用的是应用程序负载均衡器 ...
- SSL证书部署HTTPS站点Apache/Nginx配置
SSL证书及HTTPS协议 SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:1.数据信息在客户端和服务器之间的 ...
- Linux下Nginx配置阿里云 SSL证书实现HTTPS访问
这篇文章主要介绍了nginx配置ssl证书实现https访问的示例 1.服务器系统:Centos 2. 阿里云申请SSL证书 选择“免费版DV SSL”,点击立即购买: 下载证书 列表中找到已签发的证 ...
- Nginx配置SSL证书实现https访问「浏览器未认证」
http 和 https 介绍 http:应用最广泛的一种网络协议,是一个B/S的request和response的标准,用于从www服务器传输超文本到本地浏览器的传输协议. https:以安全为目标 ...
- 使用nginx+docker配置https负载均衡
了解Docker Docker是一个golang编写的开源轻量级的.可移植的.自给自足的容器,Docker主要应用在以下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环 ...
- office web apps安装部署,配置https,负载均衡(五)配置服务器场
前提条件:您已经完成了域控制器的配置,拥有域账号,并且已经安装了OWA启动所需要的必要软件: 具体步骤可以参考: office web apps安装部署,配置https,负载均衡(一)背景介绍 off ...
- spring boot / cloud (五) 自签SSL证书以及HTTPS
spring boot / cloud (五) 自签SSL证书以及HTTPS 前言 什么是HTTPS? HTTPS(全称:Hyper Text Transfer Protocol over Secur ...
- 在IIS下部署SSL证书实现HTTPS
在IIS下部署SSL证书实现HTTPS HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.谷歌已经制定了一项长远的计划,它的最终目标是将所有通过HTTP协议呈现的网页标为“不安全” ...
- 在nginx环境下搭建基于ssl证书的websocket服务转发,wss
1.证书准备 本地调试,可以安装自签名证书,安装方法参考https本地自签名证书添加到信任证书访问 2.修改配置文件 将上面的配置文件拷贝到conf目录,添加或者修改节点如下 # HTTPS serv ...
随机推荐
- JavaScript -- throw、try 和 catch
try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 很想java哦. <!DOCTYPE html> <html> <head& ...
- bzoj1345 序列问题
题意: 给你一个序列,长度为n.你需要进行n - 1次操作,每次合并两个相邻的数,代价是max,合并后成为max,求最小代价. n <= 1e6 解: 有个显然的做法是nlogn的,显然不行.. ...
- 【模板】kmp
引理:当计算第 \(i\) 位的失配指针时,若 \(j_0\) 是一个候选条件,那么小于 \(j_0\) 的最大候选条件是 \(fail[j_0]\). 证明:反证法.假设存在 \(j_1\),使得\ ...
- centos7 上配置Javaweb---MySQL的安装与配置、乱码解决
上一篇谢了关于jdk和tomcat的安装.今天先更新一下有用的. 1. 不用关闭防火墙,把80端口添加进防火墙的开放端口. firewall-cmd --zone=public --add-port= ...
- 洛谷 P1083 借教室
传送门:Probem 1083 https://www.cnblogs.com/violet-acmer/p/9721160.html 一.暴力简述 首先我们不难看出,这道题--并不是一道多难的题,因 ...
- CentOS6.7下Ansible部署
Ansible是一种集成IT系统的配置管理, 应用部署, 执行特定任务的开源平台. 它基于Python语言实现, 部署只需在主控端部署Ansible环境, 被控端无需安装代理工具, 只需打开SSH, ...
- Tensorflow-gpu版本安装
目录 服务器选型 NVIDIA GPU驱动安装 cuda和cudnn的安装 cuda安装 cudnn的安装 tensorflow-gpu安装 最近给公司部署一套深度学习相关的环境,以tensorflo ...
- python 3字符编码
python 3字符编码 官方链接:http://legacy.python.org/dev/peps/pep-0263/ 在Python2中默认是ascii编码,Python3是utf-8编码 在p ...
- NFS无法启动解决方式
今天一台挂载nfs磁盘的服务器出现异常,数据不能写入,执行 df -h 卡住不动. 登录nfs server查看发现nfs为启动. [root@server10-13 web]# exportfs [ ...
- Spark记录-SparkSQL相关学习
$spark-sql --help 查看帮助命令 $设置任务个数,在这里修改为20个 spark-sql>SET spark.sql.shuffle.partitions=20; $选择数据 ...