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

[经验分享] HAproxy指南之haproxy配置详解2(理论篇)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-16 13:23:17 | 显示全部楼层 |阅读模式
  上一小节的从haproxy的配置文件我们知道haproxy相关参数基本介绍,但是在实际生产环境中,往往需要根据相关规则做请求匹配跳转,这时就需要用到Frontend;Backend这两个配置段,再结合Frontend的acl匹配规则来做相应的客户端请求跳转;另外,可能还会遇到客户端访问出错,这时就需要利用错误重定向功能,将其定义到相关友情提示的错误页面上,这样更加人性化。

一. Frontend匹配规则ACL用法详解

haproxy ACL具有很强大的功能,能够定义三到七层的规则。ACL的作用,就是为了匹配一些特别的请求,然后对其进行修改或者分发到不同的服务器组中

①haproxy acl定义

格式: acl <aclname> <criterion> [flags] [operator] [<value>]


<aclname>:ACL名称,区分字符大小写,且其只能包含大小写字母、数字、-(连接线)、_(下划线)、.(点号)和:(冒号);haproxy中,acl可以重名,这可以把多个测试条件定义为一个共同的acl;

<criterion>:测试标准,即对什么信息发起测试;测试方式可以由[flags]指定的标志进行调整;而有些测试标准也可以需要为其在<value>之前指定一个操作符[operator];

[flags]:目前haproxy的acl支持的标志位有3个:

-i:不区分中模式字符的大小写;

-f:从指定的文件中加载模式;

--:标志符的强制结束标记,在模式中的字符串像标记符时使用;

<value>:acl测试条件支持的值有以下四类:

1.  整数或整数范围:如1024:65535表示从1024至65535;仅支持使用正整数(如果出现类似小数的标识,其为通常为版本测试),且支持使用的操作符有5个,分别为eq、ge、gt、le和lt;

2.  字符串:支持使用“-i”以忽略字符大小写,支持使用“\”进行转义;如果在模式首部出现了-i,可以在其之前使用“–”标志位;

3.  正则表达式:其机制类同字符串匹配;

4.  IP地址及网络地址;

注意:同一个acl中可以指定多个测试条件,这些测试条件需要由逻辑操作符指定其关系。条件间的组合测试关系有三种:“与”(默认即为与操作)、“或”(使用“||”操作符)以及“非”(使用“!”操作符)。

常用的测试标准(criteria)

(1) 基于七层协议(http)规则acl测试标准

1. method <string>

method <string>测试HTTP请求报文中使用的方法。

例如: 利用method来实现前段读写分离:

acl  read method GET
acl  read method HEAD
acl write method PUT
acl write method POST
use_backend imgservers if read
use_backend uploadservers if write

2. path_beg <string> ||url_beg

用于测试请求的URL是否以指定的模式开头;下面的例子用于测试URL是否以 /static、/images、/javascript或/stylesheets头。

例如:利用path_beg实现以/static /images开头的请求转交到 static server上:

acl url_static path_beg -i /static /images
use_backend static if url_static

2. path_end <string> || url_reg

用于测试请求的URL是否以<string>指定的模式结尾。例如,下面的例子用户测试URL是否以jpg、gif、png、css或js结尾

例如:利用path_end实现以.jpg .gif .png .css等结尾的格式的请求转交到 static server上:

acl url_static path_end -i .jpg .gif .png .css .js .html
use_backend static if url_static

3. hdr_beg <string>

用于测试请求报文的指定首部的开头部分是否符合<string>指定的模式。

acl is_lvs3 hdr_beg(host) -i lvs3.test.net:8080  
use_backend lvs3 if is_lvs3

#表示当request header中的host前缀部分匹配到lvs.test.net.:8080则将请求转给后端backend定义的 is_lvs3上

4. hdr_end <string>

用于测试请求报文的指定首部的结尾部分是否符合<string>指定的模式

acl is_lvs3 hdr_end(host) -i lvs3.test.net:8080  
use_backend lvs3 if is_lvs2

#表示当request header中的host后缀部分匹配到lvs3.test.net.:8080则将请求转给后端backend定义的 is_lvs2上

5. hdr <string>

用于测试请求报文中的所有首部或指定首部信息是否满足指定的条件;指定首部时, 其名称不区分大小写, 且在括号中“()”不能有任何多余的空白字符。测试服务器端的响应报文时可以使用shdr()。

例如 当用户访问172.16.1.100时,重定向到http://www.afwing.com

acl  dstipaddr  hdr(Host) 172.16.1.100
redirect  location   http://www.afwing.com if  dstipaddr

(2) 基于四层协议(ip)规则acl测试标准

1. dst和dst_port

定义访问地址为目标地址或目标端口的acl规则

2. src和src_port

定义访问地址为源地址或源端口的acl规则

例如: 允许10.0.0.0/24的用户访问,其他用户将禁止

acl net10  src  10.0.0.0/24
tcp-request content  accept  if  net10
tcp-request  content  reject
tcp-request content accept [ {if | unless} ]
Accept a connection if/unless a content inspection condition is matched

②haproxy acl引用

当定义好了ACL后我们可以利用“use_backend” 参数来引用acl规则,如果需要引用多个acl时,只需要依次在后面添加相关acl ,也可以 匹配多个acl,如下示例:

1.正常写法:

use_backend static if url_static

2.或者写法:

use_backend backend1 if aclA || aclB
use_backend backend1 if aclA ||  !aclC

注意上面“||”也可以使用or来表示

3.非(不符合)写法:

use_backend backend1 if aclA !aclB
use_backend backend1 if aclA !aclB !aclC

4.与(and)写法:

use_backend backend1 if aclA !aclB
use_backend backend1 if aclA !aclB !aclC

haproxy 常见应用实例:

1. haproxy 利用acl实现页面动静分离;

frontend webservs
bind *:80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg$ .gif$ .png$ .css$ .js$ .html$
acl url_php path_end  -i .php$
use_backend static if url_static or host_static
use_backend dynamic if url_php
default_backend dynamic
backend static
balance roundrobin
server node1 192.168.1.111:80 check maxconn 3000
backend dynamic
balance roundrobin
server node2 192.168.1.112:80 check maxconn 1000  

二. haproxy 错误重定向用法

格式为: errorfile  错误代码code  错误代码文件路径

如下为常用的优化客户端访问出现错误时错误提示页面示例

errorfile 403 /etc/haproxy/errorfiles/403.http
errorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http

至此,以上关于haproxy的配置文件相关参数就介绍到这里了,这些都是基本参数,如要更详细的配置介绍,请访问haproxy官方文档说明:

运维网声明 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-191480-1-1.html 上篇帖子: HAproxy指南之haproxy配置详解(理论篇) 下篇帖子: HAproxy指南之haproxy实现应用动静分离(案例篇)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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