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

[经验分享] haproxy ACL及动静分离

[复制链接]

尚未签到

发表于 2019-1-1 12:32:35 | 显示全部楼层 |阅读模式
  一、haproxy ACL说明
  二、haproxy 动静分离
  

  一、haproxy ACL说明
  1.1.ACL作用
  使用访问控制列表(ACL)提供了灵活的解决方案来执行内容切换,并且通常基于从请求中提取的内容,响应或任何环境状态来做出决定。
  也就是,ACL能分析请求的内容,并做相应的操作
  

  1.2.ACL语法
  acl   [flags] [operator] []
  :acl 名称,自定义,建议做到见名只意。
  

  :测试的标准,测试的信息说明。
  [flags]:
  -i:在所有后续模式匹配期间忽略大小写。
  -f:从文件加载模式。
  -m:使用特定的模式匹配方法
  -n:禁止DNS解析
  -M:像地图文件一样加载-f指向的文件。
  -u:强制ACL的唯一标识
  - :强制结束标志。当字符串看起来像一个标志时有用。
  

  匹配条件:
  - AND (与)
  - OR  (或)
  - ! 非
  例如:
  acl missing_cl hdr_cnt(Content-length) eq 0
  block if HTTP_URL_STAR !METH_OPTIONS || METH_POST missing_cl
  block if METH_GET HTTP_CONTENT
  block unless METH_GET or METH_POST or METH_OPTIONS  1.3.好了,不废话了,看例子
acl valid_method method GET HEAD   #定义一个名为valid_method的检测请求方法的acl
http-request deny if ! valid_method #请求拒绝如果是非上面的方法
acl clear      dst_port  80   #定义名为clear目标端口为80的acl
acl secure     dst_port  8080  #定义名为secure目标为8080的acl
acl login_page url_beg   /login #定义名为login_page且url以/login开头的acl
acl logout     url_beg   /logout #定义名为logout且url以/logout开头的acl
acl uid_given  url_reg   /login?userid=[^&]+ #定义名为uid_given,url正则匹配
acl cookie_set hdr_sub(cookie) SEEN=1 #定义名为cookie_set,匹配cook的子串
redirect prefix   https://mysite.com set-cookie SEEN=1 if !cookie_set #跳转前半部分如,http://mysite.com/login/us? 跳转http://mysite.com/为https开头,后半部分不变,如果cookie没设置的话,设置为acl定义的cookie
redirect prefix   https://mysite.com           if login_page !secure  #如果请求的登录页,且目标端口不是8080,跳前半部分到https://mysite.com
redirect prefix   http://mysite.com drop-query if login_page !uid_given #如果登录业没有给定id,则丢弃请求
redirect location http://mysite.com/           if !login_page secure #如果不是登录页的请求目标端口为8080则,跳转至http://mysite.com/  
redirect location / clear-cookie USERID=       if logout #登录的域为"/"则清除cookie信息
acl being_scanned be_sess_rate gt 100 #定义名为being_scanned的acl,如果后端回话创建速率大于100
redirect location /denied.html if being_scanned #如果满足上面的条件,则将请求转发至/denied.html  1.4.防止大量请求的参数
  be_sess_rate:返回与后端的会话创建速率相对应的整数值(每秒新的会话数)。当昂贵或易碎的会话速率过高或限制服务滥用(例如,阻止吸引在线字典)时,这与ACL一起使用以切换到备用后端。使用log-format伪指令将此元素添加到日志也很有用。
  

  fe_sess_rate:返回与前端的会话创建速率对应的整数值(每秒新的会话数)。这与ACL一起使用以将进入的会话速率限制到可接受的范围,以便防止在最早的时刻滥用服务,例如当与其他第4层ACL组合以迫使客户端等待比特速率时下降到限制以下。使用log-format伪指令将此元素添加到日志也很有用。另请参阅前端使用的“rate-limit sessions”指令。
  1.5.测试示例
  修改配置文件:
# vim /etc/haproxy/haproxy.cfg
....
backend webserver
    balance    roundrobin
    cookie WEBSVR insert nocache
    acl login_page url_beg /login
    acl logout     url_beg /logout
    acl test_page  url_reg ^/test[0-9].html$
    redirect prefix https://zldckl.com if login_page
    redirect location / clear-cookie USERID=  if logout   
    http-request deny if test_page
    server  web1 192.168.199.126:80 weight 1 maxconn 500 maxqueue 300 cookie cklser1 check
    server  web2 192.168.199.194:80 weight 1 maxconn 500 maxqueue 300 cookie cklser2 check
    server  web3 192.168.199.180:80 weight 1 maxconn 500 maxqueue 300 cookie cklser3 check  重新加载服务:
systemctl restart haproxy.service  测试登录页调整到https


  跳转到https

  测试退出也到主页:

  跳转到主页:

  测试正则页面拒绝:

  拒绝:

  二、动静分离示例
  2.配置动静分离
  架构图

  配置tomcat和php略过
  测试服务器访问:
  php:

  tomcat:

  static:

  2.2.配置动静分离
  修改配置文件:
vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
frontend  main *:80
    mode http
    log global
    option httpclose
    option logasap
    option dontlognull
    acl url_static  path_beg    -i   /static /images /img /css
    acl url_static  path_end    -i   .gif .png .jpg .css .js
    acl url_java    path_end    -i   .jsp
    acl url_php     path_end    -i   .php
    use_backend static if url_static
    use_backend java   if url_java
    use_backend php    if url_php

frontend  stats_ser
    bind *:8800
    use_backend web_stats
backend static
    balance    roundrobin
    server  web1 192.168.199.194:80 weight 1 maxconn 500 maxqueue 300 check
backend java
    balance    roundrobin
    cookie WEBSVR insert nocache
    server  java1 192.168.199.180:8080 weight 1 maxconn 500 maxqueue 300 cookie cklser3 check
backend php
    balance    roundrobin
    cookie WEBSVR insert nocache
    server  php1 192.168.199.126:80 weight 1 maxconn 500 maxqueue 300 cookie cklser1 check
backend web_stats
    server web1 192.168.199.126:80 check
    server web2 192.168.199.194:80 check
    server web3 192.168.199.180:8080 check
    stats enable
    stats hide-version
    stats uri     /ckl?stats
    stats realm   Haproxy\ Statistics
    stats auth    ckl:1QAZnji9
    stats auth    zld:4rfvBHU8
    stats auth    admin:7uj4rf99
    stats admin if TRUE
    stats refresh 5s  重新加载配置:
systemctl restart haproxy.service  测试访问:







运维网声明 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-658263-1-1.html 上篇帖子: HAProxy+LAMP动静分离 下篇帖子: HAProxy自带监控页面
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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