本实验全部在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负载均衡的更多相关文章

  1. 阿里云域名ssl证书导入aws负载均衡使用

    一 .原因 由于公司战略需求,需要将阿里云的服务器迁移到aws,在迁移过程中,我们需要使用的是aws的负载均衡,可以在EC2的控制台 负载平衡位找到负载均衡.根据业务需求我们使用的是应用程序负载均衡器 ...

  2. SSL证书部署HTTPS站点Apache/Nginx配置

    SSL证书及HTTPS协议 SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:1.数据信息在客户端和服务器之间的 ...

  3. Linux下Nginx配置阿里云 SSL证书实现HTTPS访问

    这篇文章主要介绍了nginx配置ssl证书实现https访问的示例 1.服务器系统:Centos 2. 阿里云申请SSL证书 选择“免费版DV SSL”,点击立即购买: 下载证书 列表中找到已签发的证 ...

  4. Nginx配置SSL证书实现https访问「浏览器未认证」

    http 和 https 介绍 http:应用最广泛的一种网络协议,是一个B/S的request和response的标准,用于从www服务器传输超文本到本地浏览器的传输协议. https:以安全为目标 ...

  5. 使用nginx+docker配置https负载均衡

    了解Docker Docker是一个golang编写的开源轻量级的.可移植的.自给自足的容器,Docker主要应用在以下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环 ...

  6. office web apps安装部署,配置https,负载均衡(五)配置服务器场

    前提条件:您已经完成了域控制器的配置,拥有域账号,并且已经安装了OWA启动所需要的必要软件: 具体步骤可以参考: office web apps安装部署,配置https,负载均衡(一)背景介绍 off ...

  7. spring boot / cloud (五) 自签SSL证书以及HTTPS

    spring boot / cloud (五) 自签SSL证书以及HTTPS 前言 什么是HTTPS? HTTPS(全称:Hyper Text Transfer Protocol over Secur ...

  8. 在IIS下部署SSL证书实现HTTPS

    在IIS下部署SSL证书实现HTTPS   HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.谷歌已经制定了一项长远的计划,它的最终目标是将所有通过HTTP协议呈现的网页标为“不安全” ...

  9. 在nginx环境下搭建基于ssl证书的websocket服务转发,wss

    1.证书准备 本地调试,可以安装自签名证书,安装方法参考https本地自签名证书添加到信任证书访问 2.修改配置文件 将上面的配置文件拷贝到conf目录,添加或者修改节点如下 # HTTPS serv ...

随机推荐

  1. Luogu 1312 【NOIP2011】玛雅游戏 (搜索)

    Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...

  2. CF 1000

    水爆了...... 当然不是题目水,而是我水. 第一题,看完题目我稍微惊了一下,有点难度(并不). 开个map,先加后减,统计正数即可. 第二题,看完我冷汗就流下来了,有点难啊,这是B难度? 趴床上推 ...

  3. MySQL_异常

    问题1 描述:在连接MYSQL数据库时出现问题:“ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)” 分 ...

  4. 设计模式---对象创建模式之工厂方法模式(Factory Method)

    前提:“对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定.它是接口抽象之后的第一步工作. 典型模式(表现最为突出) 工 ...

  5. 15. Spring boot CRUD

    一.列表页 templates/emp/list.html 0.侧边栏链接: <li class="nav-item"> <a class="nav-l ...

  6. 数据库的一致性读,赃读,多线程与赃读,ACID,UNDO

    赃读 对于对象额同步异步方法,我们在设计自己的程序的时候,一定要考虑的问题整体,不然会出现数据不一致的错误,很经典的就是赃读(dityread) 示例: ​ package com.nbkj.thre ...

  7. APR欺骗

    ARP欺骗简介 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听.篡改.重放.钓鱼等攻 ...

  8. Prometheus 监控 Nginx 流量 (三)

    介绍 基于Openresty和Prometheus.Consul.Grafana设计的,实现了针对域名和Endpoint级别的流量统计,使用Consul做服务发现.KV存储,Grafana做性能图展示 ...

  9. MySQL备份可能遇到的坑

    MySQL备份工具,支持各种参数选项,使用不同的选项极有可能影响备份处理过程.本文使用我们常规认为合理的备份参数,测试/验证是否存在容易忽视的坑 # 常规备份参数 # mysqldump shell& ...

  10. mysql 开源~canal安装解析

    一 简介:今天咱们来聊聊canal的一些东西 二 原理: canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql ma ...