haproxy ACL及动静分离
一、haproxy ACL说明二、haproxy 动静分离
一、haproxy ACL说明
1.1.ACL作用
使用访问控制列表(ACL)提供了灵活的解决方案来执行内容切换,并且通常基于从请求中提取的内容,响应或任何环境状态来做出决定。
也就是,ACL能分析请求的内容,并做相应的操作
1.2.ACL语法
acl []
:acl 名称,自定义,建议做到见名只意。
:测试的标准,测试的信息说明。
:
-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_port80 #定义名为clear目标端口为80的acl
acl secure dst_port8080#定义名为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_givenurl_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_pageurl_reg ^/test.html$
redirect prefix https://zldckl.com if login_page
redirect location / clear-cookie USERID=if logout
http-request deny if test_page
serverweb1 192.168.199.126:80 weight 1 maxconn 500 maxqueue 300 cookie cklser1 check
serverweb2 192.168.199.194:80 weight 1 maxconn 500 maxqueue 300 cookie cklser2 check
serverweb3 192.168.199.180:80 weight 1 maxconn 500 maxqueue 300 cookie cklser3 check 重新加载服务:
systemctl restart haproxy.service 测试登录页调整到https:
https://s3.运维网.com/wyfs02/M00/8C/8B/wKiom1hvT-fj47TsAAAXK5cqfO8340.png-wh_500x0-wm_3-wmp_4-s_3414225126.png
跳转到https
https://s3.运维网.com/wyfs02/M00/8C/88/wKioL1hvT-fShq-ZAAAPRzzij4I344.png-wh_500x0-wm_3-wmp_4-s_3874835928.png
测试退出也到主页:
https://s4.运维网.com/wyfs02/M01/8C/88/wKioL1hvUBCSt4U6AAAk-wb4RqQ621.png-wh_500x0-wm_3-wmp_4-s_2445529453.png
跳转到主页:
https://s3.运维网.com/wyfs02/M02/8C/8B/wKiom1hvUBjRnwjBAAA2tD9iXY0343.png-wh_500x0-wm_3-wmp_4-s_1631052966.png
测试正则页面拒绝:
https://s5.运维网.com/wyfs02/M01/8C/8B/wKiom1hvUGjgOKSNAAASR93h0Jg686.png-wh_500x0-wm_3-wmp_4-s_2393402402.png
拒绝:
https://s5.运维网.com/wyfs02/M02/8C/88/wKioL1hvUGjwjtReAAAhW_6EMs4300.png-wh_500x0-wm_3-wmp_4-s_1661070030.png
二、动静分离示例
2.配置动静分离
架构图
http://s1.运维网.com/wyfs02/M00/8C/89/wKioL1hvYYqyqRH7AAB5f54oW8I959.png
配置tomcat和php略过
测试服务器访问:
php:
http://s3.运维网.com/wyfs02/M01/8C/89/wKioL1hvYZmgHY_dAAA9lu-N_d4275.png-wh_500x0-wm_3-wmp_4-s_4256604871.png
tomcat:
http://s5.运维网.com/wyfs02/M02/8C/8C/wKiom1hvYcrjgwqiAABKeTKQQRg560.png-wh_500x0-wm_3-wmp_4-s_107770666.png
static:
http://s2.运维网.com/wyfs02/M02/8C/8C/wKiom1hvYeqS2V7iAAATkwxohBo085.png-wh_500x0-wm_3-wmp_4-s_2667318957.png
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
frontendmain *:80
mode http
log global
option httpclose
option logasap
option dontlognull
acl url_staticpath_beg -i /static /images /img /css
acl url_staticpath_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
frontendstats_ser
bind *:8800
use_backend web_stats
backend static
balance roundrobin
serverweb1 192.168.199.194:80 weight 1 maxconn 500 maxqueue 300 check
backend java
balance roundrobin
cookie WEBSVR insert nocache
serverjava1 192.168.199.180:8080 weight 1 maxconn 500 maxqueue 300 cookie cklser3 check
backend php
balance roundrobin
cookie WEBSVR insert nocache
serverphp1 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 测试访问:
http://s5.运维网.com/wyfs02/M02/8C/8C/wKiom1hvYmGBDrbWAABBnUt-fnU707.png-wh_500x0-wm_3-wmp_4-s_2323053994.png
http://s3.运维网.com/wyfs02/M00/8C/89/wKioL1hvYoGAeDjeAAAVTA4WRIw674.png-wh_500x0-wm_3-wmp_4-s_2984274974.png
http://s2.运维网.com/wyfs02/M00/8C/8C/wKiom1hvYqGCYj-XAABHZrQzVRc149.png-wh_500x0-wm_3-wmp_4-s_2401886492.png
页:
[1]