docker安装配置Haproxy

Haproxy 安装及配置
docker部署HAproxy:
mkdir -p /opt/haproxy
docker run -d --restart=always -p 6443:6443 -p 9999:9999 --name haproxy -v /opt/haproxy:/usr/local/etc/haproxy:ro haproxy:2.1

docker run -d --restart=always --net=host --name haproxy -v /etc/localtime:/etc/localtime -v /opt/haproxy:/usr/local/etc/haproxy:ro haproxy:2.1

cat << EOF > /opt/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /usr/local/etc/haproxy    #锁定运行目录
    pidfile     /var/run/haproxy.pid
    maxconn     4000                      #每个haproxy进程的最大并发连接数,要考虑到ulimit -n的大小限制
    user        root                      #运行haproxy的用户
    group       root                      #运行haproxy的用户组
    daemon
    nbproc 2                  #开启的haproxy进程数,与CPU保持一致
    #nbthread  4              #指定每个haproxy进程开启的线程数,默认为每个进程一个线程
    #cpu-map 1 0              #绑定haproxy 进程至指定CPU
    #cpu-map 2 1
    #cpu-map 3 2
    #cpu-map 4 3
    #maxsslconn  100000        #SSL每个haproxy进程ssl最大连接数
    maxconnrate  100000        #每个进程每秒最大连接数
    spread-checks  3           #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间

defaults
    mode                    tcp     #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    log                     global
    retries                 3
    timeout connect         10s    #连接超时
    timeout client          1m     #客户端超时
    timeout server          1m     #服务器超时

########统计页面配置########  
listen admin_status  
    bind 0.0.0.0:9999                #监听端口  
    mode http                        #http的7层模式  
    option httplog                   #采用http日志格式  
    #log 127.0.0.1 local0 err  
    maxconn 10  
    stats refresh 30s                #统计页面自动刷新时间  
    stats uri /status                #统计页面url  
    stats realm Haproxy \ statistic  #统计页面密码框上提示文本  
    stats auth admin:HA@2020         #统计页面用户名和密码设置  
    stats hide-version               #隐藏统计页面上HAProxy的版本信息  

frontend kube-apiserver
    bind *:6443 # 指定前端端口
    mode tcp
    default_backend master

backend master # 指定后端机器及端口,负载方式为轮询
    balance roundrobin
    mode tcp
    server k8s-master01  192.168.0.121:6443 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3
    server k8s-master02  192.168.0.122:6443 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3
    server k8s-master03  192.168.0.123:6443 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3
EOF


HAProxy简介
   官网:http://www.haproxy.com
   HAProxy提供高可用性、负载均衡以及基于TCP和HTTP的应用代理,支持虚拟主机,它是免费、快速并且可靠的一种负载均衡解决方案。适合处理高负载  站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
   HAProxy特点和优点:
   1.支持原声SSL,同时支持客户端和服务器的SSL.
   2.支持IPv6和UNIX套字节(sockets)
   3.支持HTTP Keep-Alive
   4.支持HTTP/1.1压缩,节省宽带
   5.支持优化健康检测机制(SSL、scripted TCP、check agent...)
   6.支持7层负载均衡。
   7.可靠性和稳定性非常好。
   8.并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
   9.支持8种负载均衡算法,同时支持session保持。
   10.支持虚拟主机。
   11.支持连接拒绝、全透明代理。
   12.拥有服务器状态监控页面。
   13.支持ACL.
 
 HAProxy为了让同一客户端访问服务器可以保持会话。有三种解决方法:客户端IP、Cookie以及Session
   1.HAProxy通过客户端IP进行Hash计算并保存,以此确保当相同IP访问代理服务器可以转发给固定的真实服务器。
   2.HAProxy依靠真实服务器发送客户端的Cookie信息进行会话保持。
   3.HAProxy将保存真实服务器的Session以及服务器标识,实现会话保持。
   (HAProxy只要求后端服务器能够在网络联通,也没有像LVS那样繁琐的ARP配置)

 HAProxy的balance8种负载均衡算法:
   1.roundrobin : 基于权重轮循。
   2.static-rr : 基于权重轮循。静态算法,运行时改变无法生效
   3.source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
   4.leastconn : 最小连接。(适合数据库负载均衡,不适合会话短的环境) 
   5.uri : 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。
   6.uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。
   7.hdr(<name>) : 根据http头转发,如果不存在http头。则使用简单轮循。

 HAProxy主要工作模式
   1.tcp模式:该模式下,在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。此模式默认,通常用于SSL、SSH、SMTP应用。
   2.http模式(一般使用):该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
   
 
二、Haproxy安装
1、编译安装过程
 (1) 准备源码包,可到官网下载 http://www.haproxy.org
[root@centos7 ~]# ll haproxy-1.8.20.tar.gz 
-rw-r--r-- 1 root root 2083917 Jan 10 20:39 haproxy-1.8.20.tar.gz
 (2) 安装相应依赖包
[root@centos7 ~]# yum install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel systemd-devel
 (3) 解压源码包,并进行编译
[root@centos7 ~]# tar -zxvf haproxy-1.8.20.tar.gz 
[root@centos7 ~]# cd haproxy-1.8.20/
[root@centos7 haproxy-1.8.20]# make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy
[root@centos7 haproxy-1.8.20]# make install PREFIX=/usr/local/haproxy
[root@centos7 haproxy-1.8.20]# cp haproxy /usr/sbin/
 (4) 创建启动脚本
[root@centos7 haproxy-1.8.20]# vim /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
 (5) 创建用户与相关目录以及配置文件
[root@centos7 haproxy-1.8.20]# useradd -r -s /sbin/nologin haproxy
[root@centos7 haproxy-1.8.20]# mkdir /etc/haproxy
[root@centos7 haproxy-1.8.20]# mkdir /usr/local/haproxy/run
[root@centos7 haproxy-1.8.20]# mkdir /var/lib/haproxy
[root@centos7 haproxy-1.8.20]# chown -R haproxy:haproxy /var/lib/haproxy/
[root@centos7 haproxy-1.8.20]# vim /etc/haproxy/haproxy.cfg
 配置文件
[root@centos7 haproxy-1.8.20]# cat /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
#uid 981
#gid 981
user haproxy
group haproxy
daemon
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info

defaults
option http-keep-alive
option  forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

listen stats
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global
 stats uri     /haproxy-status
 stats auth    haadmin:q1w2e3r4ys

listen  web_port
 bind 0.0.0.0:80
 mode http
 log global
 server web1  127.0.0.1:8080  check inter 3000 fall 2 rise 5
 (6) 启动haproxy服务
[root@centos7 haproxy-1.8.20]# systemctl start haproxy
[root@centos7 haproxy-1.8.20]# ps -ef|grep haproxy
root     58693     1  0 23:29 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/run/haproxy.pid
haproxy  58697 58693  0 23:29 ?        00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /usr/local/haproxy/run/haproxy.pid
root     58708  6403  0 23:29 pts/0    00:00:00 grep --color=auto haproxy
三、Haproxy配置项解析
1、global 全局配置段
• chroot        #锁定运行目录
• deamon        #以守护进程运行
• stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin    #socket文件
• user, group, uid, gid    #运行haproxy的用户身份
• nbproc                #开启的haproxy进程数,与CPU保持一致
• nbthread                #指定每个haproxy进程开启的线程数,默认为每个进程一个线程
• cpu-map 1 0            #绑定haproxy 进程至指定CPU
• maxconn                #每个haproxy进程的最大并发连接数
• maxsslconn            #SSL每个haproxy进程ssl最大连接数
• maxconnrate            #每个进程每秒最大连接数
• spread-checks        #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间
• pidfile                #指定pid文件路径
• log 127.0.0.1 local3 info    #定义全局的syslog服务器;最多可以定义两个 
2、proxies 代理配置段
 defaults [<name>]  #默认配置项,针对以下的frontend、backend和listen生效,可以多个name
• option redispatch            #当server Id对应的服务器挂掉后,强制定向到其他健康的服务器
• option abortonclose        #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
• option http-keep-alive 60    #开启会话保持
• option forwardfor            #开启IP透传
• mode http                    #默认工作类型
• timeout connect 60s        #转发客户端请求到后端server的最长连接时间(TCP之前) 
• timeout server 600s        #转发客户端请求到后端服务端的超时超时时长(TCP之后)
• timeout client 600s        #与客户端的最长空闲时间
• timeout http-keep-alive 120s    #session 会话保持超时时间,范围内会转发到相同的后端服务器
• timeout check 5s            #对后端服务器的检测超时时间,一般在服务器组配置
 frontend <name>  #前端servername,类似于Nginx的一个虚拟主机server
• bind [<address>]:<port_range> [, ...] [param*]    #指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中
• mode http/tcp                    #指定负载协议类型
• use_backend backend_name    #调用的后端服务器组名称
 示例:
frontend WEB_PORT
  bind 192.168.27.7:80
  mode tcp
  use_backend backend_name
 backend <name>  #后端服务器组,等于Nginx的upstream
• mode http/tcp        #指定负载协议类型
• option            #配置选项,可加httpchk,smtpchk, mysql-check, pgsql-check,ssl-hello-chk等方法,可用于实现更多应用层检测功能
• server            #定义后端real server,后可接 check 对指定real进行健康状态检查,默认不开启
check                #对指定real server进行健康状态检查,默认不开启
• addr IP            #可指定的健康状态监测IP
• port num            #指定的健康状态监测端口
• inter num            #健康状态检查间隔时间,默认2000 ms
• fall num            #后端服务器失效检查次数,默认为3
• rise num            #后端服务器从下线恢复检查次数,默认为2
• weight            #默认为1,最大值为256,0表示不参与负载均衡
• backup            #将后端服务器标记为备份状态
• disabled            #将后端服务器标记为不可用状态
• redirect prefix http://www.xxx.com/    #将请求临时重定向至其它URL,只适用于http模式
• mbacklog axconn <maxconn>    #当前后端server的最大并发连接数
• <backlog>    #当server的连接数达到上限后的后援队列长度

frontend WEB_PORT_80
  bind 192.168.27.7:80
  mode http
  use_backend web_prot_http_nodes

backend web_prot_http_nodes
  mode http
  option forwardfor
  server web1 192.168.27.17:8080 weight 1 check inter 3000 fall 3 rise 5
  server web2 192.168.27.27:8080 weight 1 check inter 3000 fall 3 rise 5
  server web2 192.168.27.37:8080 check inter 3000 fall 3 rise 5 backup
 listen <name>  #将 frontend 和 backend 合并在一起配置
listen WEB_PORT_80
  bind 192.168.27.7:80
  mode http
  option forwardfor
  server web1 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server web2 192.168.27.27:8080 check inter 3000 fall 3 rise 5
 注:name字段只能使用 " - "、" _ "、" . "、" : ",并且严格区分大小写。
四、Haproxy的调度算法
 通过 balance 指明对后端服务器的调度算法,配置在listen或backend。调度算法有以下几种:
1、first
 根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置;
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #可以为tcp或http
  balance first
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
2、static-rr
 基于权重的轮询静态调度算法,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制;
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #可以为tcp或http
  balance static-rr
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
3、roundrobin
 基于权重的轮询动态调度算法,支持权重的运行时调整,不等于lvs 的 rr,支持慢启动即新加的服务器会逐渐增加转发数,每个后端backend中最多支持4095个server,此为默认调度算法;
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #可以为tcp或http
  balance rountrobin
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
4、leastconn
 加权的最少连接动态调度算法,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度,比较适合长连接的场景使用,比如MySQL等场景;
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #可以为tcp或http
  balance leastconn
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
5、source
 源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景;
  •  map-based:取模法,基于服务器权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变;
  •  consistent:一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动;
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #可以为tcp或http
  balance source
  hash-type consistent
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
6、uri
 基于对用户请求的uri做hash并将请求转发到后端指定服务器;
  • map-based:取模法
  • consistent:一致性哈希
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #只能是http
  balance uri
  hash-type consistent
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
7、url_param
 对用户请求的url中的<params>部分中的参数name作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server;
 假设url=http://www.xx.com/index.php?k1=v1&k2=v2,则url_param="k1=v1&k2=v2";
  • map-based:取模法
  • consistent:一致性哈希
#假设url=http://192.168.27.7/index.html?name=tom
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #只能是http
  balance url_param
  hash-type consistent
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
8、hdr
 针对用户每个http头部(header)请求中的指定信息做hash,此处由<name>指定的http首部将会被取出并做hash计算,然后由服务器总权重相除以后派发至某挑出的服务器,假如无有效的值,则会被轮询调度;
  • map-based:取模法
  • consistent:一致性哈希
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http  #只能是http
  balance hdr(User_Agent)
  hash-type consistent
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
9、rdp-cookie
 对远程桌面的负载,使用cookie保持会话;
  • map-based:取模法
  • consistent:一致性哈希
listen RDP
  bind 192.168.27.7:3389
  mode tcp  #只能是tcp
  balance rdp_cookie
  hash-type consistent
  option forwardfor
  server 192.168.27.17 192.168.27.17:3389 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:3389 check inter 3000 fall 3 rise 5
五、部分配置实例
1、基于cookie实现的session保持
 cookie <value>:为当前server指定cookie值,实现基于cookie的会话黏性
 cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
  <name>:cookie名称,用于实现持久连接
   rewrite:重写
   insert:插入
   prefix:前缀
   nocache:当client和hapoxy之间有缓存时,不缓存cookie
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http
  cookie SERVER-COOKIE insert indirect nocache
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 cookie web1 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 cookie web2 check inter 3000 fall 3 rise 5
2、Haproxy状态页实现
• stats enable    #基于默认的参数启用stats page
• stats hide-version    # 隐藏版本
• stats refresh <delay>    # 设定自动刷新时间间隔
• stats uri <prefix>    #自定义stats page uri,默认值:/haproxy?stats 
• stats realm <realm>    #账户认证时的提示信息,示例:stats realm : HAProxy\ Statistics    此处\ 为转义空格
• stats auth <user>:<passwd>    #认证时的账号和密码,可使用多次,默认:no authentication
• stats refresh 5s    #定义页面自动刷新间隔时间
• stats admin { if | unless } <cond>    #启用stats page中的管理功能

listen stats
  bind 192.168.27.7:9009
  stats enable
  stats hide-version 
  stats uri /haproxy-status
  stats realm HAPorxy\ Stats\ Page
  stats auth haadmin:123456
  stats auth admin:123456    #可以有多个    
  stats refresh 30s
  stats admin if TRUE
3、Haproxy日志配置
在haproxy配置文件default配置项定义:
    log 127.0.0.1 local{1-7} info #基于syslog记录日志到指定设备,级别有(err、
warning、info、debug)

配置rsyslog: 
    $ModLoad imudp
    $UDPServerRun 514
     local3.*     /var/log/haproxy.log

配置HAProxy:
listen web_port
    bind 127.0.0.1:80
    mode http
    log global
    option tcplog   #允许记录tcp连接的状态和时间
    server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5

重启rsyslog服务与haproxy服务
4、三种后端服务器的监测
 (1) 基于四层传输端口监测
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http
  log global
  option forwardfor
  server 192.168.27.17 192.168.27.17:8080 check port 9000 addr 172.168.27.17 inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check port 9000 addr 172.168.27.27 inter 3000 fall 3 rise 5
 (2) 基于指定URI 做状态监测
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http
  log global
  option forwardfor
  option httpchk GET /wp-includes/js/jquery/jquery.js?ver=1.12.4 HTTP/1.0 #基于指定URL
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
 (3) 基于指定URI的request请求头部内容做状态监测
listen web_prot_http_nodes
  bind 192.168.27.7:80
  mode http
  log global
  option forwardfor
  option httpchk HEAD /wp-includes/js/jquery/jquery.js?ver=1.12.4 HTTP/1.0\r\nHost:\ 192.168.27.7    #通过request获取的头部信息进行匹配进行健康检测
  server 192.168.27.17 192.168.27.17:8080 check inter 3000 fall 3 rise 5
  server 192.168.27.27 192.168.27.27:8080 check inter 3000 fall 3 rise 5
5、自定义错误页面
• errorfile 500 /usr/local/haproxy/html/500.html    #自定义错误页面跳转
• errorloc 503 http://192.168.7.103/error_page/503.html    #自定义错误页面跳转
6、基于acl+文件后缀实现动静分离
listen web_port
  bind 192.168.27.7:80
  mode http
  acl php_server path_end -i .php
  use_backend php_server_host if php_server
  acl image_server path_end -i .jpg .png .jpeg .gif
  use_backend image_server_host if image_server
  default_backend default_host

backend default_host
  mode http
  server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5

backend php_server_host
  mode http
  server web1 192.168.27.27:8080 check inter 2000 fall 3 rise 5

backend image_server_host
  mode http
  server web1 192.168.27.37:8080 check inter 2000 fall 3 rise 5
7、acl匹配访问路径
listen web_port
  bind 192.168.27.7:80
  mode http
  acl static_path path_beg -i /static /images /javascript
  use_backend static_path_host if static_path
  default_backend default_host

backend default_host
  mode http
  server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5

backend static_path_host
  mode http
  server web1 192.168.27.27:8080 check inter 2000 fall 3 rise 5
8、基于http策略的访问控制
listen web_port
  bind 192.168.27.7:80
  mode http
  acl badguy_deny src 192.168.4.1
  http-request deny if badguy_deny
  http-request allow
  default_backend default_host

backend default_host
  mode http
  server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5

backend static_path_host
  mode http
  server web1 192.168.27.27:8080 check inter 2000 fall 3 rise 5
9、https的配置
#web server http
frontend web_server-http
  bind 192.168.27.7:80
  mode http
  redirect scheme https if !{ ssl_fc }        #把80端口的请求重向定443
  use_backend web_host
  
#web server https
frontend web_server-https
  bind 192.168.27.7:443 ssl crt /usr/local/haproxy/certs/haproxy.pem  #crt后的证书文件为PEM格式,且同时包含证书和所有私钥
  mode http
  use_backend web_host

backend web_host
  mode http
  http-request set-header X-Forwarded-Port %[dst_port]        #向后端传递用户请求的端口
  http-request add-header X-Forwarded-Proto https if { ssl_fc }        #向后端传递用户请求的协议
  server web1 192.168.27.17:8080 check inter 2000 fall 3 rise 5
  server web2 192.168.27.27:8080 check inter 2000 fall 3 rise 5

# mkdir /usr/local/haproxy/certs
# cd /usr/local/haproxy/certs
# openssl genrsa -out haproxy.key 2048
# openssl req -new -x509 -key haproxy.key -out haproxy.crt -subj "/CN=www.xxx.com"
# cat haproxy.key haproxy.crt > haproxy.pem    #将私钥和证书导入到一个文件中
# openssl x509 -in haproxy.pem -noout -text    #查看证书
10、Haproxy后端服务器的动态上下线
# yum install socat 
# echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
# echo "get weight web_host/192.168.7.101" | socat stdio /var/lib/haproxy/haproxy.sock 
# echo "disable server web_host/192.168.7.101" | socat stdio /var/lib/haproxy/haproxy.sock 
# echo "enable server web_host/192.168.7.101" | socat stdio /var/lib/haproxy/haproxy.sock

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值