设为首页 收藏本站
查看: 1179|回复: 0

[经验分享] HAproxy实现从入门到进阶

[复制链接]

尚未签到

发表于 2019-1-1 14:11:40 | 显示全部楼层 |阅读模式
  HAproxy
  LB Cluster (负载均衡 集群)
  四层
  lvs、nginx(stream模块)、haproxy
  七层
  http:nginx(http、ngx_http_upstream)、haproxy(mode http),httpd,ats、perlbal,pound
  官方文档:http://cbonte.github.io/haproxy-dconv/
  
  使用yum安装 haproxy 光盘收录的版本即可
  以HAProxy 1.5为例
  

  主程序:/usr/sbin/haproxy
  主配置文件:/etc/haproxy/haproxy.cfg
  

  配置端分为2段·
  global:全局配置段
  进程及安全配置相关的参数
  性能调整相关参数
  Debug参数
  proxies:代理配置段
  default:frontend,listen,backend提供默认配置:
  其中
  frontend:前端,相当于nginx,server{ }
  backend:后端,相当于nginx,upstream { }
  listen:  同时用于前端和后端
  

  实现1.1使用haproxy配制简单的负载均衡集群
  

  这里使用三台主机
  172.18.10.10,使用yum安装httpd,并配置基本网页内容,启动httpd服务
  [root@localhost ~]# yum install -y httpd
  [root@localhost ~]# vim /var/www/html/index.html
  Server1 172.18.10.10
  root@localhost ~]# ss -tnl
  State       Recv-Q Send-Q                               Local Address:Port                                 Peer Address:Port
  LISTEN      0      128                                             :::80                                             :::*
  LISTEN      0      128                                             :::22                                             :::*
  LISTEN      0      128                                              *:22                                              *:*
  LISTEN      0      100                                            ::1:25                                             :::*
  LISTEN      0      100                                      127.0.0.1:25
  172.18.10.11,使用yum安装httpd,并配置基本网页内容,启动httpd服务
  [root@localhost ~]# yum install -y httpd
  [root@localhost ~]# vim /var/www/html/index.html
  Server1 172.18.10.11
  root@localhost ~]# ss -tnl
  State       Recv-Q Send-Q                               Local Address:Port                                 Peer Address:Port
  LISTEN      0      128                                             :::80                                             :::*
  LISTEN      0      128                                             :::22                                             :::*
  LISTEN      0      128                                              *:22                                              *:*
  LISTEN      0      100                                            ::1:25                                             :::*
  LISTEN      0      100                                      127.0.0.1:25
  

  172.18.200.100,使用yum安装haproxy,编辑haproxy.cfg文件
  [root@localhost haproxy]# vim haproxy.cfg
  将frontend断和backend段做如下修改
  frontend  web
  bind *:80
  default_backend         websrvs
  backend  websrvs
  balance roundrobin
  server srv1 172.18.10.10:80 check
  server srv2 172.18.10.11:80 check
  启动haproxy服务
  [root@localhost haproxy]# service haproxy start
  

  使用curl命令访问测试
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100;done
  Server1 172.18.10.10
  Server2 172.18.10.11
  Server1 172.18.10.10
  Server2 172.18.10.11
  Server1 172.18.10.10
  Server2 172.18.10.11
  Server1 172.18.10.10
  Server2 172.18.10.11
  Server1 172.18.10.10
  Server2 172.18.10.11
  结论,实现haproxy简单的LB Cluster。调度规则默认为rr(轮询)调度
  

  实验1.2在原来基础上添加mysql服务,并实现负载均衡调度
  

  首先在两台后端backend服务器上安装mysql,并启动服务,配置mysql相关参数,测试mysql链接是否正常
  [root@BYQ ~]#service mysqld start
  Starting mysqld:                                           [  OK  ]
  mysql> select user();
  +----------------+
  | user()         |
  +----------------+
  | root@localhost |
  +----------------+
  1 row in set (0.00 sec)
  mysql> grant all on mydb.* to 'test'@'%' identified by 'testpass';
  Query OK, 0 rows affected (0.00 sec)
  

  在客户端主机上测试mysql的的链接是否正常
  [root@localhost ~]# mysql -utest -ptestpass -h172.18.10.10
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 5
  Server version: 5.1.73 Source distribution
  

  Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  

  Oracle is a registered trademark of Oracle Corporation and/or its
  affiliates. Other names may be trademarks of their respective
  owners.
  

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  

  mysql>
  

  [root@localhost ~]# mysql -utest -ptestpass -h172.18.10.11
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 7
  Server version: 5.1.73 Source distribution
  

  Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  

  Oracle is a registered trademark of Oracle Corporation and/or its
  affiliates. Other names may be trademarks of their respective
  owners.
  

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  

  mysql>
  

  两台后端主机mysql连接均正常
  

  接下来在haproxy服务器端进行配置
  [root@localhost ~]# cd /etc/haproxy/
  [root@localhost haproxy]# ls
  haproxy.cfg  haproxy.cfg.bak
  [root@localhost haproxy]# cp haproxy.cfg{,.web}
  [root@localhost haproxy]# ls
  haproxy.cfg  haproxy.cfg.bak  haproxy.cfg.web
  [root@localhost haproxy]# vim haproxy.cfg
  frontend  web
  mode    tcp
  bind *:3306
  default_backend         websrvs
  backend  websrvs
  balance leastconn
  server mysql1 172.18.10.10:3306 check
  server mysql2 172.18.10.11:3306 check
  简单配置完毕
  

  

  实验1.3配置haproxy rslog
  [root@localhost ~]# vim /etc/rsyslog.conf
  

  # Save boot messages also to boot.log
  local7.*                                                /var/log/boot.log
  local2.*                                                /var/log/haproxy.log
  

  # Provides UDP syslog reception ##表示载入UDP模式,并监听在514端口
  $ModLoad imudp
  $UDPServerRun 514
  

  保存退出并重启动rsyslog服务,查看日志监听端口是否启动
  [root@localhost ~]# service rsyslog restart
  Shutting down system logger:                               [  OK  ]
  Starting system logger:                                    [  OK  ]
  [root@localhost ~]# ss -unl
  State      Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port
  UNCONN     0      0                                     *:514                                  *:*
  UNCONN     0      0                                     *:57263                                *:*
  UNCONN     0      0                                    :::514                                 :::*
  

  

  实验1.4配置source算法实现hash-type绑定
  编辑haproxy.cfg,更改添加如下配置
  backend  websrvs
  balance source
  server srv1 172.18.10.10:80 check
  server srv2 172.18.10.11:80 check
  hash-type map-based
  重启服务
  [root@localhost haproxy]# service haproxy restart
  Stopping haproxy:                                          [  OK  ]
  Starting haproxy:                                          [  OK  ]
  在客户端测试
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100;done
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  Backend Server 2 172.18.10.11
  

  实验1.5配置uri算法提高命中。绑定一致性hash consistent
  编辑haproxy.cfg文件
  backend  websrvs
  balance uri
  server srv1 172.18.10.10:80 check
  server srv2 172.18.10.11:80 check
  hash-type consistent
  保存退出重启服务,结论不管哪台服务器,只要uri相同,便访问同一个后端主机,若uri不同也另当别论
  例如随机在两台后端主机生成20个页面文件
  [root@localhost ~]# for i in {1..20};do echo "Test Page $i (BE 1)" > /var/www/html/test$i.html;done
  [root@localhost ~]# for i in {1..20};do echo "Test Page $i (BE 2)" > /var/www/html/test$i.html;done
  在客户端请求,则发现test1在BE1,而test2在BE2
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100/test1.html;done
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  Test Page 1 (BE 1)
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100/test2.html;done
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  Test Page 2 (BE 1)
  因此得出结论和绑定的客户端没关系,只和绑定的uri有关系,因此能够极大的提高缓存命中率
  

  实验1.6采用roundrobin调度规则,且增加权重 进行测试
  编辑haproxy.cfg
  

  backend  websrvs
  balance         roundrobin
  server srv1 172.18.10.10:80 check weigth 2
  server srv2 172.18.10.11:80 check weigth 1
  hash-type       consistent
  保存并退出
  重启服务
  [root@localhost haproxy]# service haproxy restart
  Stopping haproxy:                                          [  OK  ]
  Starting haproxy:                                          [  OK  ]
  在客户端访问同一个URL
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100/test5.html;done
  Test Page 5 (BE 2)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 2)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 2)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 2)
  将其中一个服务器下线,等3秒 实现fall (默认三秒)
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100/test5.html;done
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  再将下线的服务器上线,等2秒,实现rise (默认两秒)恢复轮询
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100/test5.html;done
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 2)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 2)
  Test Page 5 (BE 1)
  Test Page 5 (BE 1)
  Test Page 5 (BE 2)
  Test Page 5 (BE 1)
  结论:实现健康状态检查
  也可以自己设置 check inter(时间间隔) rise 次数 fall 次数 和 maxconn(最大并发连接数)、 以及backlog(后援队列不指定值的话,就用maxconn的值代替),如下所示
  backend  websrvs
  balance         roundrobin
  server srv1 172.18.10.10:80 check inter 1000 rise 1 fall 2 maxconn 2000 weight 2
  server srv2 172.18.10.11:80 check weight 1
  hash-type       consistent
  

  实验1.7,将第一个后端主机标记为backup或者disabled,在第二个后端主机上使用redir重定向到百度的url上去
  

  backend  websrvs
  balance         roundrobin
  server srv1 172.18.10.10:80 check inter 1000 rise 1 fall 2 maxconn 2000 weight 2 disabled
  server srv2 172.18.10.11:80 check weight 1 redir http://www.baidu.com/
  hash-type       consistent
  

  访问172.18.200.100.页面跳转至百度主页
  

  实验1.8 开启haproxy stats 页面,并且调试各参数
  开启stats页面,在backend 配置段添加 stats enable
  backend  websrvs
  balance         roundrobin
  server srv1 172.18.10.10:80 check inter 1000 rise 1 fall 2 maxconn 2000 weight 2 backup
  server srv2 172.18.10.11:80 check weight 1 redir http://www.baidu.com/
  hash-type       consistent
  stats enable
  重启服务
  这样便开启了stats页面
  其中stats页面是有默认值的,默认值如下
  - stats uri   : /haproxy?stats
  - stats realm : "HAProxy Statistics"
  - stats auth  : no authentication
  

  - stats scope : no restriction
  在浏览器输入http://172.18.200.100/haproxy?stats,则登录状态页面显示
  修改stats uri的默认值
  frontend  web
  bind *:80
  default_backend         websrvs
  

  stats enable
  stats uri /haadim?admin
  

  backend  websrvs
  balance         roundrobin
  server srv1 172.18.10.10:80 check inter 1000 rise 1 fall 2 maxconn 2000 weight 2
  server srv2 172.18.10.11:80 check weight 1
  hash-type       consistent
  保存退出重启服务
  在浏览器输入http://172.18.200.100/haadmin?admin,才能再次显示状态页面
  

  实验1.9 为stats页面添加用户名密码访问认证
  frontend  web
  bind *:80
  default_backend         websrvs
  

  stats enable
  stats uri       /haadmin?admin
  stats realm     "Stats\ Web"        ##(提示标题)
  stats auth      admin1:admin1
  stats auth      admin2:admin2
  stats auth      admin3:admin3
  保存退出并重启服务
  在浏览器输入http://172.18.200.100/haadmin?admin,需要输入用户名和密码才能使用
  而且可以启用登录用户管理
  frontend  web
  bind *:80
  default_backend         websrvs
  

  stats enable
  stats uri       /haadmin?admin
  stats realm     "Stats\ Web"
  stats auth      admin1:admin1
  stats auth      admin2:admin2
  stats auth      admin3:admin3
  stats admin if TRUE
  表示如果验证成功,就可以一直设置相应的参数
  保存,并且退出
  重启haproxy服务
  刷新刚才的页面,则会现在后端的模块下面显示可操作的会话框
  Choose the action to perform on the checked servers :     Apply
  

  在Apply的下拉框中会有许多选项,可以控制后端的服务器状态
  

  也可以直接专门定义一个端口,让stats监听在一个端口上,以后只能通过该端口访问stats页面
  frontend  web
  bind *:80
  default_backend         websrvs
  listen stats :10086
  stats enable
  stats uri       /haadmin?admin
  stats realm     "Stats\ Web"
  stats auth      admin1:admin1
  stats auth      admin2:admin2
  stats auth      admin3:admin3
  stats admin if TRUE
  在浏览器输入http://172.18.200.100:10086/haadmin?admin 通过用户验证,访问
  

  还可以隐藏haproxy版本信息
  stats hide-version
  还可以自动刷新,以及显示具体信息
  stats refresh
  stats show-desc
  stats show-legends
  stats show-node
  

  实验2.0,显示前端最大连接数maxconn
  frontend  web
  bind *:80
  maxconn 4000
  default_backend         websrvs
  

  实验2.1,代理ssh服务 实现mode tcp模式的验证
  backend app
  balance     roundrobin
  server  app1 127.0.0.1:5001 check
  server  app2 127.0.0.1:5002 check
  server  app3 127.0.0.1:5003 check
  server  app4 127.0.0.1:5004 check
  listen sshsrvs :10088
  mode            tcp
  maxconn         20
  balance         leastconn
  server          sshsrv1 172.18.10.10:22 check
  server          sshsrv2 172.18.10.11:22 check
  在客户端使用[root@localhost ~]# ssh -p 10088 root@172.18.200.100
  刷新页面
  发现在页面中sshsrvs栏中,sshsrv1页面有连接处理显示,说明代理成功
  

  实验2.2,代理mysql,实现mode tcp模式的验证
  listen sshsrvs :3306
  mode            tcp
  maxconn         20
  balance         leastconn
  server          sshsrv1 172.18.10.10:3306 check
  server          sshsrv2 172.18.10.11:3306 check
  查看端口是否监听
  [root@localhost haproxy]# ss -tnl
  State      Recv-Q Send-Q                      Local Address:Port                        Peer Address:Port
  LISTEN     0      128                                     *:10086                                  *:*
  LISTEN     0      20                                      *:3306                                   *:*
  LISTEN     0      128                                     *:80                                     *:*
  LISTEN     0      128                                    :::22                                    :::*
  LISTEN     0      128                                     *:22                                     *:*
  LISTEN     0      100                                   ::1:25                                    :::*
  LISTEN     0      100                             127.0.0.1:25
  在客户端测试连接mysql
  [root@localhost ~]# mysql -utest -ptestpass -h172.18.200.100
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 6
  Server version: 5.1.73 Source distribution
  

  Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  

  Oracle is a registered trademark of Oracle Corporation and/or its
  affiliates. Other names may be trademarks of their respective
  owners.
  

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  

  mysql>
  结论:代理成功 ,实现mode tcp模式的验证
  

  

  实验2.3 实现基于ookie的粘性处理,即基于cookie的session sticky的实现:
  

  backend  websrvs
  balance         roundrobin
  cookie          WEBSRV insert nocache indirect
  server          srv1 172.18.10.10:80 check cookie web1
  server          srv2 172.18.10.11:80 check cookie web2
  hash-type       consistent
  使用浏览器访问http://172.18.200.100/,开启F12,查看浏览器记录的Request Headers,如下
  Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Accept-Encoding:gzip, deflate, sdch
  Accept-Language:zh-CN,zh;q=0.8
  Authorization:Basic YWRtaW4zOmFkbWluMw==
  Cache-Control:max-age=0
  Connection:keep-alive
  Cookie:WEBSRV=web1
  Host:172.18.200.100
  If-Modified-Since:Wed, 03 May 2017 06:23:57 GMT
  If-None-Match:"1e0599-27-54e98b3828057"
  Upgrade-Insecure-Requests:1
  User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
  

  可以看出Cookie:WEBSRV=web1,已经基于cookie黏性绑定web1服务器,因此再次不敢访问多少次都是web1
  

  实验2.4 实现option forward发往后端主机的请求报文中添加“X-Forwarded-For”首部
  

  首先进入后端服务器,修改httpd关于日志段的配置
  [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
  LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  从启httpd服务,再次在客户端访问
  [root@localhost ~]# for i in {1..10};do curl http://172.18.200.100/index.html;done
  Backend Server 1 172.18.10.10
  Backend Server 2 172.18.10.11
  Backend Server 1 172.18.10.10
  Backend Server 2 172.18.10.11
  Backend Server 1 172.18.10.10
  Backend Server 2 172.18.10.11
  Backend Server 1 172.18.10.10
  Backend Server 2 172.18.10.11
  Backend Server 1 172.18.10.10
  Backend Server 2 172.18.10.11
  

  并查看访问日志,
  [root@localhost ~]# tail /var/log/httpd/access_log
  172.18.249.57 - - [10/May/2017:08:08:22 +0800] "GET /index.html HTTP/1.1" 200 39 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
  172.18.249.57 - - [10/May/2017:08:08:22 +0800] "GET /index.html HTTP/1.1" 200 39 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
  

  则在日志中会显示真实访问的客户端地址
  

  实验2.5 实现rspadd  [{if | unless} ]  向响应报文首部添加一个指定的首部
  frontend  web
  bind *:80
  rsadd X-Via:\ HAProxy
  maxconn 4000
  default_backend         websrvs
  从启haproxy服务
  刷新浏览器
  在响应报文首部发现添加的指定首部
  Response Headers
  Date:Wed, 03 May 2017 16:24:04 GMT
  ETag:"1e0599-27-54e98b3828057"
  Server:Apache/2.2.15 (CentOS)
  Vary:Accept-Encoding
  X-Via:HAProxy
  

  实验2.6 实现rspidel  [{if | unless} ]  (ignore case) 不区分大小写
  frontend  web
  bind *:80
  rspadd X-Via:\ HAProxy
  rspidel Server.*
  maxconn 4000
  default_backend         websrvs
  

  Date:Wed, 03 May 2017 16:28:59 GMT
  ETag:"1e0599-27-54e98b3828057"
  Vary:Accept-Encoding
  X-Via:HAProxy
  

  对比之前,server已经被删除
  

  实验2.7 log
  [root@localhost haproxy]# tail /var/log/haproxy.log
  May 10 12:46:47 localhost haproxy[6628]: 172.18.254.240:59220 [10/May/2017:12:46:47.769] web websrvs/srv1 0/0/0/1/1 304 173 - - --VN 1/1/0/1/0 0/0 "GET / HTTP/1.1"
  

  

  实验2.8 实现内容 类型压缩compression
  frontend  web
  bind *:80
  rspadd X-Via:\ HAProxy
  rspidel Server.*
  maxconn 4000
  default_backend         websrvs
  compression type text/html
  compression algo gzip
  浏览器访问http://172.18.200.100/test12.html
  在响应报文首部response headers
  Accept-Ranges:bytes
  Content-Encoding:gzip
  Content-Length:40
  Content-Type:text/html; charset=UTF-8
  Date:Wed, 03 May 2017 16:46:10 GMT
  ETag:"1e059d-14-54e9c272c1b5f"
  Last-Modified:Wed, 03 May 2017 10:31:02 GMT
  Vary:Accept-Encoding
  X-Via:HAProxy
  发现内容压缩,且格式为gzip
  

  实验2.9 对后端服务器http协议的健康状态监测
  backend  websrvs
  balance         roundrobin
  cookie          WEBSRV insert nocache indirect
  server          srv1 172.18.10.10:80 check cookie web1
  server          srv2 172.18.10.11:80 check cookie web2
  option httpchk /test20.html
  hash-type       consistent
  在stats页面可以查看,正常通过检测
  

  实验3.0 http-check检测
  backend  websrvs
  balance         roundrobin
  cookie          WEBSRV insert nocache indirect
  server          srv1 172.18.10.10:80 check cookie web1
  server          srv2 172.18.10.11:80 check cookie web2
  option           httpchk /test20.html
  http-check      expect rstatus ^2
  hash-type       consistent
  在stats页面可以查看,正常通过检测
  

  

  实验3.1 实现基于acl的各种访问控制
  acl只检查不控制,控制还需其他条件实现
  acl要先配置,再调用
  

  frontend  web
  acl invalid_src src 172.18.254.240
  block if invalid_src
  保存退出重启服务,使用浏览器访问http://172.18.200.100/
  403 Forbidden
  

  Request forbidden by administrative rules.
  

  客户端地址正好为172.18.254.240,因此访问被拒绝
  

  而且403页面可以重定向到我们自己定义的错误页面去,操作如下
  [root@localhost haproxy]# mkdir /etc/haproxy/errorfiles
  [root@localhost haproxy]# vim /etc/haproxy/errorfiles/403.html
  OoOo,VIP Source
  

  编辑haproxy配置文件
  frontend  web
  acl invalid_src src 172.18.254.240
  block if invalid_src
  errorfile 403 /etc/haproxy/errorfiles/403.html
  保存退出,并重启haproxy服务
  使用浏览器访问http://172.18.200.100/,显示内容如下
  OoOo,VIP Source
  

  或者使用errorloc重定向uri到百度
  frontend  web
  acl invalid_src src 172.18.254.240
  block if invalid_src
  errorloc 403 http://www.baidu.com
  使用浏览器访问http://172.18.200.100/,显示内容如下
  

  百度主页。。。。。
  

  如果acl是 curl_agent,则使用如下的服务器172.18.10.11:8080
  frontend  web
  acl invalid_src src 172.18.254.240
  block if invalid_src
  errorloc 403 http://www.baidu.com
  acl curl_agent hdr_sub(User-Agent) -i curl
  use_backend curlbe if curl_agent
  bind *:80
  rspadd X-Via:\ HAProxy
  rspidel Server.*
  maxconn 4000
  default_backend         websrvs
  compression type text/html
  compression algo gzip
  

  backend curlbe
  balance roundrobin
  server curlsrv1 172.18.249.57:80 check
  并在后端172.18.249.57上开启80端口
  [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
  [root@localhost ~]# service httpd restart
  

  打开浏览器,出输入http://172.18.200.100:10086/haadmin?admin,输入用户名和密码验证
  发现curlbe模块正常运行,并且通过四层检测
  使用curl命令
  [root@localhost ~]# curl http://172.18.249.57
  Curl server 172.18.249.57
  

  

  实验3.2实现简单的动静分离
  在172.18.249.57端。使用yum安装php
  在将编辑index.php页面
  Curl server 172.18.249.57
  
  

  使用浏览侧访问测试页面,成功显示php信息
  在haproxy端配置haproxy.cfg文件。添加如下内容
  frontend  web
  #       acl invalid_src src 172.18.254.240
  #       block if invalid_src
  errorloc 403 http://www.baidu.com
  #       acl curl_agent hdr_sub(User-Agent) -i curl
  #       use_backend curlbe if curl_agent
  acl phpapp path_end -i .php ##定义acl条件
  use_backend dynsrvs if phpapp##定义使用的后端服务标识
  bind *:80
  rspadd X-Via:\ HAProxy
  rspidel Server.*
  maxconn 4000
  default_backend         websrvs
  compression type text/html
  compression algo gzip
  

  #backend curlbe
  #       balance roundrobin
  #       server curlsrv1 172.18.249.57:80 check
  backend dynsrvs ##定义后端的代理服务及标识
  balance source
  server dynsrv1 172.18.249.57:80 check
  保存并退出,重启服务,
  使用浏览器分别访问
  http://172.18.200.100/index.php
  Curl server 172.18.249.57
  

  PHP Logo
  PHP Version 5.3.3
  

  http://172.18.200.100/test1.html
  

  Test Page 1 (BE 1)
  

  实现简单的动静分离
  

  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658328-1-1.html 上篇帖子: haproxy搭建负载均衡 下篇帖子: Haproxy的基础知识介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表