威尼斯人6799.comHAProxy配置文件详解和ACL效率,haproxy学习笔记

HAProxy:
达成了1种事件驱动,单壹进度模型,帮衬数万计的面世连接,用于为tcp和http应用程序提供高可用,负载均衡和代理服

HAProxy配置文件详解和ACL功效

本文目录:
一.一配置文件注解
壹.二简单布署示范
壹.三全局配置参数
一.肆.
proxy配置段和常用配置选项
 一.4.一http事务模型相关安装
 1.4.2
balance
 1.4.3
hash-type
 1.4.4
bind
 1.4.5
mode
 1.4.6
log
 1.4.7
capture request header 和 capture response header
 1.4.8
maxconn
 1.4.9
use_backend
 1.4.10
default_backend
 1.4.11
server和default-server
 1.4.12
option httpcheck
 1.4.13
stats相关
 1.4.14
option forwardfor
 一.四.15错误页面相关
 1.4.16
cookie和redispatch
 1.4.17
reqadd和rspadd
 一.四.18超时时间相关
 1.四.1九http商议过滤:http-request
 一.4.20
tcp请求和响应过滤
1.5
ACL
 1.5.1
ACL语法
 一.五.2ACL完成处境分离示例

haproxy大概各种大版本都提供了合法手册(内容大概都一致),手册格外详尽。例如haproxy
一.七版本关于配置文件的官方手册:。

haproxy的灵魂在于配备文件,配置文件根本在于前者(frontend)和后端(backend)的定制。全局选项(global)的配置将暗许提供的有点修改下即可。

能够使用haproxy命令行检查陈设文件语法是或不是科学。

haproxy -f /etc/haproxy/phaproxy.cfg -c

要么接纳sysv脚本的check参数。

service haproxy check

务的消除方案,尤其适用于高负荷且需求水滴石穿连接或7层处理机制的web站点

一.一 配置文件注脚

HAProxy在开发银行此前会分析配置文件,有3处安插音信来自:

  • 最优先处理来自haproxy命令行给出的参数。
  • “global”配置段的参数,设定为大局参数。
  • 代理配置段。包蕴defaults,listen,frontend和backend段。

别的haproxy配置文件引进了引号和转义符:反斜线表示转义符;单引号表示强引用;双引号表示弱引用。假若字符串内须要输入空格,则空格须要开始展览转义大概经过引号包围,不转义时在布署文件中表示分隔符。

如:

  \    标记二个空白字符以界别它的本义和当作分隔符时的空白符
  \#  to mark a hash and differentiate it from a comment
  \\  to use a backslash
  \’  to use a single quote and differentiate it from strong quoting
  \”  to use a double quote and differentiate it from weak quoting

下边三种状态是等价的:

log-format %{+Q}o\ %t\ %s\ %{-Q}r
log-format “%{+Q}o %t %s %{-Q}r”
log-format ‘%{+Q}o %t %s %{-Q}r’
log-format “%{+Q}o %t”‘ %s %{-Q}r’
log-format “%{+Q}o %t”‘ %s’\ %{-Q}r

在配备文件中,一些含有了数值的参数表示时间,如timeout。这个值暗中同意以皮秒为单位,但也能够利用任何的时间单位后缀。

  • us: 微秒(microseconds),即1/1000000秒;
  • ms: 毫秒(milliseconds),即1/1000秒;
  • s: 秒(seconds);
  • m: 分钟(minutes);
  • h:小时(hours);
  • d: 天(days);

代理(http): 
正向代理:
反向代理:

壹.二 不难安插示范

以下是2个简单易行的安顿文件,该配置文件代理方式为http,frontend定义的是监听在前者有着网卡的80端口上,此文件中只定义了3个后端服务器组backend,该backend只含有1台监听在1二柒.0.0.壹:8000的服务器。在haproxy的术语中,frontend表示的是监听套接字,用于等待客户端的连接。

    global
        daemon
        maxconn 256

    defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

    frontend http-in
        bind *:80
        default_backend web_servers

    backend web_servers
        server server1 127.0.0.1:8000 maxconn 32

假定接纳listen配置格局替换backend和frontend,则更简明,以下是相等配置:

    global
        daemon
        maxconn 256

    defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

    listen http-in
        bind *:80
        server server1 127.0.0.1:8000 maxconn 32

代理功能:web缓存(加快)、反向代理、内容路由(依照流量及内容类型等将呼吁转发至特定服务器)、转码器;

壹.3 全局配置参数

大局配置参数设定haproxy进程运维环境,一般和操作系统钦赐的值有关,配置不错后1般都不会去修改。全局配置参数一般都有相应的下令行选项。

一.进程管理及平安有关的参数。

haproxy是单进程、事件驱动、非阻塞模型的调度器。尽管是单进度,但法定强烈提出不要设置为多进度,因为单进度能够处理很多少个代理连接请求且品质极好(官方手册说30W个代理实例都能依心像意运转),设置为多进程反而有一对范围。

  • chroot
    :修改haproxy工作目录至钦命目录,可升高haproxy安全级别,但要确定保证必须为空且任何用户均不能够有写权限;
  • daemon:让haproxy以守护进程的主意工作于后台,等同于命令行的”-D”选项,当然,也得以在命令行中以”-db”选项将其禁止使用;(提出安装项)
  • uid/user:以钦点的UID或用户名地方运转haproxy进度;
  • gid/group:以钦赐的GID或组名运营haproxy,建议接纳专用于运作haproxy的GID,避防因权限难点带动危害;
  • log:定义全局的syslog服务器,接收haproxy运转和平息的日志。最多能够定义多个;

log  <address> <facility> [max level [min level]] 

  • log-send-hostname
    [string]:在日记的最前边记录本机主机名或string。远程发送到日志服务器时可经过了然是haproxy主机发送的。
  • pidfile:等同于命令行的”-p”选项。使用劳务运转脚本运营haproxy时建议不用设置该项,以确定保证脚本能科学获取pid文件。
  • nbproc
    :钦赐运营的haproxy进度个数,只可以用于守护进程方式的haproxy;私下认可只运行八个进度,壹般只在单进度仅能开拓少数文本讲述符的风貌中才使用多进度格局;(官方强烈建议不要设置该选拔)
  • ulimit-n:设定每经过能够开拓的最大文件讲述符数量,暗中同意haproxy会自动进行测算,由此不推荐修改此选项;(不建议安装项)
  • stats:和多进度haproxy有关,由于不提议选拔多进度,所以也不建议安装此项。但提议设置为”stats
    socket”将套接字和当麻芋果件进行绑定,如”stats socket
    /var/lib/haproxy/stats”。
  • node:定义当前节点的称呼,用于HA场景中多haproxy进度使用同壹IP地址时辨认哪个node正处在采取意况;

贰.质量调动相关的参数。

  • maxconn
    :设定每haproxy进程所收受的最大并发连接数,当达到此限制连接数后将不再接受新的连接。该参数特指和客户端的连接数,不包涵和服务端的连天。等同于命令行选项”-n”;”ulimit
    -n”正是基于此值进行活动调整的;
  • maxpipes
    :haproxy在行使splice()在基础中零复制时,是运用pipe传递实行报文粘接重组的,此选项用于设定每经过所允许选取的最大pipe个数;每一种pipe会打开七个公文描述符,因而”ulimit
    -n”自动测算时会按需调大此值;默许值为maxconn/4。调小时会影响自然的品质;
  • noepoll:在Linux系统上禁止使用epoll机制;(不提出设置此项)
  • nokqueue:在BSD系统上禁止使用kqueue机制;
  • nopoll:禁用poll机制;
  • nosplice:禁止在Linux套接字上行使基础tcp重组,那会招致更多的recv/send系统调用;(在基本版本二.6.28从此最棒不建议设置此项)
  • spread-checks <0..50, in
    percent>:在haproxy后端有着众多服务器的光景中,在标准的时刻距离后统一对众服务器进行健康景况检查恐怕会带来出人意料问题;此选项用于将其检查的日子距离长度上扩大或减小一定的自由时长;默许为0,官方提出安装为贰到伍之间。(提出设置项)
  • tune.bufsize
    :设定buffer的尺寸,同样的内存条件下,较小的值能够让haproxy有能力接受越多的产出连接,较大的值能够让有个别应用程序使用较大的cookie新闻;暗中同意为16384,可在编写翻译时修改,不过强烈提议使用暗许值;(不建议安装项)
  • tune.chksize
    :设定检查缓冲区的轻重,单位为字节;更加大的值有助于在较大的页面中形成基于字符串或正则pattern的文书查找,但也会占用越多的系统能源;(不提议安装项)
  • tune.maxaccept
    :设定haproxy进度内核调度运营时1回性还行的再而三的个数,较大的值可以带来较大的吞吐率,暗中同意在单进度格局下为拾0,多进程形式下为八,设定为-1方可禁止此限制;(不建议安装项)
  • tune.maxpollevents
    :设定二遍io复用时系统调用可以拍卖的风浪最大数,私下认可值取决于OS;其值小于200时可节约带宽,但会略微增大互联网延迟,而超越200时会下降延迟,但会稍稍扩充网络带宽的占用量;(不建议设置项)
  • tune.maxrewrite
    :设定为首部重写或扩张而留给的缓冲空间,提出采用十二四左右的分寸;在须求接纳更加大的空中时,haproxy会自动扩充其值;(不提议安装项)
  • tune.rcvbuf.client
    :设定两端的recv_buff大小(haproxy和客户端建立tcp,和后端服务器建立tcp,共两端,由此有多少个recv_buff和两个send_buff)。单位为字节;(强烈推荐使用暗许值)
  • tune.rcvbuf.server :(强烈推荐使用私下认可值)
  • tune.sndbuf.client:设定两端的send_buff大小(强烈推荐使用私下认可值)
  • tune.sndbuf.server:(强烈推荐使用私下认可值)

据此,抛去不提议安装的项后,global段的安装大概如下:那也是yum安装haproxy时暗中同意提供的布局

global
    daemon
    log        127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile    /var/run/haproxy.pid
    maxconn    4000
    user        haproxy
    group      haproxy
    stats socket /var/lib/haproxy/stats

小心上面配置了使用local2记录log,因而还需去rsyslogd的安顿文件中添加该设备以及记录的日记地点。如下:

cat <<eof>>/etc/rsyslog.conf
  local2.*    /var/log/haproxy.log
eof

在代理服务器上添加Via首部;

壹.四 proxy配置段和常用配置选项

proxy配置部分是haproxy最重点的配置部分,包蕴上边各样配备段:

  • defaults []:设置frontend/backend/listen配置段的暗许值。
  • frontend :配置监听客户端连接的套接字。
  • backend :配置haproxy所代理的后端服务器组。
  • listen
    :定义五个完好的前端和后端代理,但后端可以不定义。所以有时候等价于frontend+backend。它常用于绑定前后端壹对1的意况。

具有代理的名目只好动用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。别的,ACL名称会有别于字母大小写。

日前,有二种主流的代办方式:tcp代理(即所谓的四层代理)和http代理(即所谓的柒层代理)。在肆层代理格局下,haproxy不难的在两岸进行双向转载。在七层代理情势下,haproxy会对情商举行分析,能够依照商业事务来允许、阻塞、切换、扩大、修改和移除request或response中的属性内容。

缓存的效果:
减弱冗余内容传输;
节省带宽、缓解互联网瓶颈;
降低了对原有服务器的伸手压力;
降低了传输延迟

一.4.一 http事务模型相关安装

  1. (no) option http-keep-alive
    启用或剥夺客户端和服务端到haproxy之间的长连接。haproxy将拍卖全部请求和响应报文,请求完后haproxy两端的总是都处在空闲状态。
  2. (no) option http-server-close
    启用或剥夺在haproxy处理完第二次响应之后关闭haproxy到服务端之间长连接的作用,但客户端的长连接还维持,后续的历次请求都再一次创建和后端的连接,每一次响应后都关闭和后端的一连。启用该选项时,haproxy将会在转载给后端server的request数据包中添加1个”Connection:Close”标记,后端Server看到此标志就会在响应后关门tcp连接。
  3. (no) option http-tunnel
    启用或剥夺在haproxy处理完第贰次呼吁和响应后关闭haproxy两端长连接的效益。在一.0-壹.五.2一版本该项是暗中同意项,但最近不建议利用,因为会时有爆发局地标题。
  4. (no) option forceclose
    启用或剥夺传输完响应报文后关门两端的连接。
  5. (no) option htthttpcloseose(甩掉选项)
  6. (no) option http-pretend-keepalive
    稍微服务器会壹笑置之带有”Connection:Close”标记的请求,从而http-server-close的后端发送响应后不会倒闭tcp连接。设置该选项时,haproxy在接受响应后会主动关闭和后端的连年。不建议安装该选取,因为多数服务器都能健康办事同时有很好的调整能力。

貌似的话,后端是静态内容缓存服务器时,或然便是静态服务器时,首要选拔使用http-keep-alive情势,后端是动态应用程序服务器时,首要接纳使用http-server-close方式。

默许情形下,借使客户端请求依照调度算法被调度到另一台后端服务器时,http-keep-alive情势下和后端服务器的空余连接会立刻断开,并再一次和被调度选中的后端服务器建立连接。可以行使”prefer-last-server”选项,使得haproxy先查看当前保全的闲暇连接是或不是可用,假使可用,则延续运用该空闲连接,不过这么会影响调度品质。

frontend和backend都得以安装这一个形式选用,即使它们交叉设置了,最后何种形式会生效?例如,frontend设置了http-keep-alive,而bakcend设置了http-server-close时,取何种格局?计算方式利用如下矩阵:keepalive优先级是最弱的,forceclose是事先级是参天的。

威尼斯人6799.com 1

yum -y install haproxy,安装haproxy  rpm
-ql
haproxy,查看安装了哪些包,找到主配置文件/etc/haproxy/haproxy.cfg

1.4.2 balance

balance <algorithm>
可用于default、listen、backend配置段。

钦命代理时负载均衡算法,匡助的算法有:

  1. roundrobin(暗许):依照权重实行轮询,在服务器的拍卖时间保持均匀分布时,那是最平衡、最公平的算法。此算法是动态的,表示权重能够在haproxy运转时调整后端服务器的权重并生效;
  2. static-rr:基于权重实行轮询,与roundrobin类似,可是为静态方法,在haproxy运维时调整其劳动器权重不会一蹴而就;
  3. leastconn:新的连年请求被派发至具备至少连接数目标后端服务器;在享有较长期会话的景况中援引应用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的,能够在运维时调整其权重;
  4. source:将呼吁的源地址举行hash运算,使得同1个客户端IP的伸手始终被派发至某一定的服务器;但当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的恳求大概会被派发至与原先恳请例外的服务器;类似于nginx的ip_hash,可用以负载均衡无cookie功用的依据TCP的商谈,缺点是会把同一NAT地址后端的客户端全体分红到同壹server上,不便宜均衡。默许为静态;
  5. uri:对ULX570I的左半有的(“?”标记在此以前的有些)举办hash运算,并除以服务器的总权重来总结派发至某合营服务器;那能够使得对同叁个ULANDI的请求总是被派发至某一定的服务器,除非服务器的权重总数发生了变更;此算法常用于代理缓存以提升缓存的命中率;但此算法仅使用于提供http服务的后端服务器;私下认可为静态算法;缺点是后端server宕机会造成深重颠簸,能够通过hash-type设置hash算法为1致性哈希化解。
  6. url_param:一般用来将1如既往用户ID转发至同一服务器的情景。在使用了basic认证时,url中的param壹般都会接纳user=XXX。使用该算法会对该参数实行hash运算,然后除以总权重以决定分配到哪台后端server。
  7. hdr(name):基于钦命的哀告首部名称进行调度。首部中钦点名称①致的调度至同一服务器。壹般采取”hdr(host)”根据请求首部中的host即指标主机来拓展hash运算。使用use_domain_only选项能够依照域名来哈希,使得访问www.bkjia.com和web.bkjia.com的伸手都调度至同一服务器。
  8. rdp-cookie
  9. rdp-cookie(name)

roundrobin和static-rr是有分别的,roundrobin是动态慢轮询,不用重启服务即可调整其权重,而static-rr必须重启服务修改的权重才生效。例如原有贰台后端server,新添加一台后,roundrobin会从此刻始于渐渐的将呼吁轮询至此新服务器,而static-rr由于须要重启,所以重启前新server不会被调度到,重启后新server和旧server平均调度。1般的话,思索加权轮询的时候,roundrobin要比static-rr好。

诚如可纳入考虑的算法有roundrobin/static-rr/leastconn/uri,个中leastconn算法用于代理ldap、mysql等长日子会话连接的情事,uri算法用于代理后端为缓存服务器的事态。

(壹). 用于调度MySQL服务器,使用何种算法?答:leastconn
(二). 用于调度静态服务器组,使用何种算法?答:roundrobin
(3).
调度动态应用程序服务器组,使用何种算法?答:使用source,但此方法会将同1NAT后端的具备客户端都调度至同1服务器,从而不便于均衡,就算影响相当的小。能够运用cookie指令来代替该算法。
(4).
调度缓存服务器,使用何种算法?答:uri,且设置hash-type为一致性哈希算法。

大局配置段:

1.4.3 hash-type

hash-type <method>
不能够用来frontend区段

概念用于将hash码映射至后端服务器的不二秘诀;可用方法有map-based和consistent,一般意况推荐应用暗许的map-based方法。

  • map-based:hash表是三个含有了具有在线服务器的静态数组。其hash值将会越发平整,会将权重思索在列,但其为静态方法,对在线服务器的权重举行调整将不会卓有成效,那意味着其不帮忙慢速运维。其它,挑选服务器是依据其在数组中的地方进行的,因而,当1台服务器宕机或添加了1台新的服务器时,超越3/6一连将会被重复派发至三个与在此之前不相同的服务器上。对于缓存服务器的做事情景来说,此措施不适用。
  • consistent:(壹致性哈希算法)hash表是1个由各服务器填充而成的树状结构;基于hash键在hash树中找寻相应的服务器时,最近的服务器将被入选。此措施是动态的,援助在运作时修改服务器权重,由此兼容慢速运营的表征。添加贰个新的服务器时,仅会对一小部分呼吁发生震慑,由此,适用于后端服务器为cache的景观。然则,此算法不甚平滑,派发至各服务器的乞求未必能达到规定的标准美好的平衡效果,因而,大概要求日常的调动服务器的权重以赢得越来越好的均衡性。

威尼斯人6799.com 2

1.4.4 bind

bind [<address>]:<port_range> [, …]
bind [<address>]:<port_range> [, …] interface
<interface>
能用于frontend和listen段

用以定义四个或多少个监听的套接字。

  • <address>:可选用,能够为主机名、IPv4地址、IPv六地址或*;省略此选项、将其钦定为*或0.0.0.0时,将监听当前系统的兼具IPv4地址;
  • <port_range>:能够是一个一定的TCP端口,也不过一个端口范围(如500五-50拾),代理服务器将经过点名的端口来接过客户端请求;注意,小于10二肆的端口要求有特定权限的用户才能动用;
  • <interface>:钦定物理接口的称呼;

例如:

    bind :80,:443
    bind 10.0.0.1:10080,10.0.0.1:10443

除却全局配置段,其余的都以代理配置段

1.4.5 mode

点名haproxy实例运行情势。可为tcp、http。tcp为肆层代理情势,不会对协商进行别的分析,只是单纯地转化数据包,如HTTPS/MYSQL等,http为7层代理情势。要是拥有配置区段都并未有设置mode,则暗中认可为tcp形式。

chroot
切换根目录,将haproxy都运作在/var/lib/haproxy
那样做是为了扩充haproxy的景德镇

1.4.6 log

log global
log <address> <facility> [<level>
[<minlevel>]]

为每一种实例启用事件和流量日志,由此可用于拥有区段。各种实例最多能够钦定八个log参数。配置格局和意义同前文全局配置参数的log。

假定使用log
global,则表示从大局继续日志设置。此外,倘若全局已经定义过四个log了,此处除引用global外还自定义了二个log,则此自定义的log失效,因为只支持三个日志设置。

pidfile 内定主进度文件  maxconn
 暗中同意最利兹接数   user 以哪个用户运转haproxy   group 以哪个组运维haproxy
 daemon 运维

1.4.7 capture request header和capture response header

capture request header <name> len <length>
capture response header <name> len <length>
仅能用于”frontend”和”listen”区段

抓获并记录以来一次出现的钦命请求首部或响应首部。请求首部是从客户端发起的呼吁首部,响应首部是从后端server响应并在haproxy准备发送给客户端前抓获的。捕获的首部值使用大括号{}括起来后会添加进日志中。假诺须要捕获多少个首部值,它们将以钦定的秩序出现在日记文件中,并以竖线”|”作为分隔符。不存在的首部记录为空字符串。

最常必要捕获的乞求首部蕴含:在虚拟主机环境中使用的”Host”、上传请求首部中的”Content-length”、神速差异真实用户和互联网机器人的”User-agent”,以及代理环境中著录请求真实来源的”X-Forward-For”。

诚如须求捕获的响应首部为:记录还有稍稍内容供给接受的”Content-length”、跟踪重定向路径的”Location”。

  • <name>:要捕获的首部的称号,此称号不区分字符大小写,但提出与它们出现在首部中的格式相同,比如大写首字母。供给注意的是,记录在日记中的是首部对应的值,而非首部名称。
  • <length>:钦定记录首部值时所记录的高精度长度,超出的一对将会被忽视。

能够捕获的呼吁首部的个数没有范围,但各样捕获最六只好记录6十四个字符。为了保障同2个frontend中国和东瀛志格式的统1性,首部破获仅能在frontend中定义。

例如:

capture request header Host len 15
capture request header X-Forwarded-For len 15
capture request header Referer len 15
capture response header Content-length len 9
capture response header Location len 15

位守护进度 stats socket
图中有表达(那样做是为着基于共享内部存款和储蓄器访问数据,而不须要经过tcp连接以提升运转质量)

1.4.8 maxconn

maxconn <conns>
不能够用于backend区段

设定一个前端的最大并发连接数��对于大型站点来说,能够尽恐怕升高此值以便让haproxy管理总是队列,从而防止不能答应用户请求。当然,此最大值不能够抢先”global”段中的定义。别的,haproxy会为每一个连接维持三个缓冲,每一个缓冲的尺寸为捌KB,再加上其余的多少,每一种连接将大体占用1柒KB的RAM空间。这意味着通过适当优化后,有着一GB的可用RAM空间时将能保险50000-陆仟0并发连接。

一旦为钦定了贰个过大值,极端气象下,其最后占据的长空恐怕会压倒当前主机的可用内存,那也许会推动意料之外的结果;由此,将其设定了二个可承受值方为精明操纵。私下认可为3000。

 

1.4.9 use_backend

use_backend <backend> [{if | unless} <condition>]

概念当满意或不满意哪些标准时利用哪个backend。条件判断是可选的,并且condition是基于acl的口径。

率先项log 指全数日志都记录到本机,
通过local二设备出口,因而还得去/etc/rsyslog.conf中添加和改动要求参数vim

1.4.10 default_backend

default_backend <backend>
不得利用于backend区段。

在未曾相称的”use_backend”规则时为实例钦赐私下认可后端。在”frontend”和”backend”之间展开内容交流时,常常使用”use-backend”定义相配规则;而从未被平整相配到的呼吁将透过参数钦命的后端接收。

譬如,已有两组backend,名称分别为dynamic和static,当不相称use_backend时将暗中认可使用dynamic作为转载后端。

use_backend    dynamic  if  url_dyn
use_backend    static  if  url_css url_img extension_img
default_backend dynamic

/etc/rsyslog.conf (在全局配置段log
最多能够内定多个)

1.4.11 server和default-server

server <name> <address>[:port] [param*]
宣称后端server,因而无法用来defaults和frontend区段。
default-server [param*]
点名server的暗中认可参数值,不可能用于frontend区段

-<name>:为此服务器钦命的里边名称,将面世在日记及警示音信中;

<address>:此服务器的IPv四地址,也扶助使用可分析的主机名;
[:port]:haproxy将呼吁转发至后端服务器的哪些端口,为可挑选;未设定时,将选择客户端请求时的一样端口;
[param*]:为此服务器设定的一雨后苦笋参数;可用的参数十分多,上面是多少个常用的参数;

服务器或默许服务器参数:

backup:设定为备用服务器,当别的具有后端server均不可用时将启用此server;

disabled:禁止使用此后端服务器。

check:运维对此server执行例市价况检查,但须要相称定义在backend的具体格检查查措施(如httpcheck,mysql-check)才会议及展览开点名的自小编批评选模范式,不钦命检检查办理法时将暗中同意以tcp方式检查。check可以依赖额外的参数实现越来越精致的设定,如:

  • inter
    <delay>:设定常规状态检查的大运距离,单位为阿秒,默许为三千;
  • rise
    <count>:设定server从离线状态重新上线要求成功检查的次数;不内定暗许为2,一般可安装为一。
  • fall
    <count>:确认server从常规状态转换为不可用状态须要检讨的次数;暗中认可为三。

cookie
<value>:为内定server设定cookie值,钦命的值将在乞请入站时被检查,第贰回为此值采取的server将在一而再的央求中被选中,其意在实现基于客户端cookie的有始有终连接;

maxconn
<maxconn>:钦命此后端服务器接受的最大并发连接数(差别于全局设置的maxconn,全局的maxconn是面向客户端的);若是发往此服务器的连接数高于钦赐的值,将被放于请求队列以等待其余连接释放;

maxqueue <maxqueue>:设定请求队列的最大尺寸;

observe
<mode>:通过观看服务器的通讯情形来判断其平常情形,私下认可禁止使用,援救的门类有”layer肆”和”layer7″,layer四表示检讨tcp连接是或不是正规,layer柒仅用于http代理场景,通过后端server发送的response来判定,例如能够看清状态码,响应报文尾部是还是不是无法解析等;

redir
<prefix>:启用重定向作用,将发往此服务器的GET和HEAD请求均以30贰状态码响应,意味着不会将请求转载至后端服务器;在prefix前边不能够动用/,且无法动用相对地址;例如:

weight
<weight>:权重,私下认可为1,最大值为256,0代表不参加负载均衡,即认为下线了不开始展览调度;

有关maxconn和maxqueue,那七个值都以往来端服务器的值。它们的高低和大局定义的maxconn是有肯定大小相比关系的。假设未有定义maxqueue,则全局maxconn应该小于或等于后端全部服务器的maxconn之和,假设定义了maxqueue,则需求小于或等于后端全部服务器的maxconn和maxqueue之和。不然haproxy接收进来的伏乞超越后端服务器的下压力极限,大概压垮后端。

例如:

server first  10.1.1.1:1080 cookie first  check inter 1000
server second 10.1.1.2:1080 cookie second check inter 1000
server backup “${SRV_BACKUP}:1080” backup
server www1_dc1 “${LAN_DC1}.101:80”
server www1_dc2 “${LAN_DC2}.101:80”
default-server inter 1000 weight 13

威尼斯人6799.com 3

1.4.12 option httpchk

option httpchk
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>
无法用于frontend段。

此命令表示根据http协议来做健康情况检查,唯有重临状态码为二xx或三xx的才觉得是健康的,其他全部情形码都认为不不荒谬。不安装该选项时,暗许使用tcp做健检,只要能成立tcp就代表符合规律。

  • uri:检查的uri路径,暗中认可为”/”。接受带有查询参数的uri
  • method:http检查时利用的METHOD。不点名时私下认可为”OPTIONS”方法,也建议采纳此情势,因为该请求方法对服务器造成的能源消耗最小。
  • version:检查的http协议版本,暗许为http/一.0,但最近游人如织都选拔HTTP/1.壹,由此那里检查版本要求修改为HTTP/一.壹,但对此该版本的HTTP协议以来,还强制须求钦命Host,中间使用\r\n隔离。

例如上面包车型客车陈设,会将健检时的页面请求发送至后端1九二.16八.一.1的80端口来显著该后端是常规的,但客户端的呼吁将中间转播至该后端的44叁端口。

backend https_relay
    mode tcp
    option httpchk
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
    server apache1 192.168.1.1:443 check port 80

敞开日志监听 tcp和udp的端口都打开
  

1.4.13 stats相关

  • stats enable:启用基于程序编写翻译时暗许设置的总计报告,不能够用来”frontend”区段。

如若未有其它的其它设定,默许就会选择如下的布局:

  – stats uri  : /haproxy?stats
  – stats realm : “HAProxy Statistics”
  – stats auth  : no authentication
  – stats scope : no restriction

固然”stats
enable”一条就可见启用计算报告,但依然提出设定别的具有的参数,避防注重于暗许设定而带来非预期后果。

例如:

  backend public_www
    server websrv1 172.16.100.11:80
    stats enable
    stats hide-version
    stats scope  .
    stats uri    /haproxyadmin?stats
    stats realm  Haproxy\ Statistics
    stats auth    statsadmin:password
    stats auth    statsmaster:password

  • stats
    hide-version:启用总括报告并隐藏HAProxy版本报告,不能够用来”frontend”区段。
  • stats realm:stats
    auth身份申明时的提醒音信。设置的提示新闻中,要是有空白字符,则要求转义。仅在与”stats
    auth”同盟使用时有意义。
  • stats
    auth:启用带认证的计算报告功能并授权一个用户帐号和相应的密码(明文)。也正是说,想要查看总括报告要求提供身份和密码。无法用于”frontend”区段。
  • stats admin:满意内定条件时启用总计报告页面包车型大巴保管功用,它同意通过web接口启用或剥夺后端服务器。
  • stats admin { if | unless } <cond>

上面是三个案例,第多个限制了仅能在本机打开报告页面时启用管理职能,第一个概念了仅同意通过认证的用户使用管理效果。

backend stats_localhost
    stats enable
    stats admin if LOCALHOST

backend stats_auth
    stats enable
    stats auth  haproxyadmin:password
    stats admin if TRUE

威尼斯人6799.com 4

1.4.14 option forwardfor

option forwardfor [ except <network> ] [ header <name> ]
[ if-none ]

允许在发往服务器的乞请首部中插入”X-Forwarded-For”首部。

  • except
    <network>:可选参数,当内定时表示请求中的源地址能相称此互联网时禁止使用此功效。
  • header
    <name>:可选参数,自定义首部名,如”X-Client”来代表”X-Forwarded-For”。有个别尤其的web服务器的确必要四个新鲜的首部。
  • if-none:仅在此首部不设有时才将其添加至请求报文问道中。

HAProxy工作于反向代理模式,其发往服务器的央求中的客户端IP均为HAProxy主机的地方而非真正客户端的地方,那会使得劳动器端的日记音讯记录不断真正的请求来源,”X-Forwarded-For”首部则可用于缓解此问题。HAProxy可以向各种发往服务器的伏乞上添加此首部,并以客户端IP为其value。

上边是二个例证。

frontend www
    mode http
    option forwardfor except 127.0.0.1

local2.*
 定义haproxy的日志记录地点,service rsyslog restart 重启日志服务

一.四.一5 错误页面相关

errorfile

errorfile <code> <file>
在用户请求不存在的页面时,重返一个页面文件给客户端而非由haproxy生成的错误代码;可用以全数段中。
<code>:钦点对HTTP的如何状态码重临钦点的页面;那里可用的状态码有200、400、40叁、408、500、50贰、50三和50四;
<file>:钦命用于响应的页面文件;
例如:
errorfile 400 /etc/haproxy/errorpages/400badreq.http
errorfile 403 /etc/haproxy/errorpages/403forbid.http
errorfile 503 /etc/haproxy/errorpages/503sorry.http

errorloc和errorloc302

errorloc <code> <url>
errorloc302 <code> <url>
恳请错误时,再次来到多个HTTP重定向至某U奇骏L的新闻;可用于全体配置段中。
<code>:钦点对HTTP的哪些状态码再次来到钦赐的页面;那里可用的状态码有200、400、40叁、40八、500、50二、50叁和50四;
<url>:Location首部中钦点的页面地方的具体路线,能够是在目前服务器上的页面包车型大巴绝对路径,也能够应用相对路径;需别的,那七个重点字都会回去30二气象呢,那将使得客户端选拔同一的HTTP方法取得钦赐的UEscortL,对于非GET方法的景色(如POST)来说会发出难点,因为重临客户端的U途观L是分化意行使GET以外的别的情势的。假若真的有那种难题,能够选用errorloc30三来回到30三状态码给客户端。

errorloc303

errorloc303 <code> <url>
请求错误时,重返二个HTTP重定向至某ULANDL的音讯给客户端;可用来全体配置段中。
<code>:钦定对HTTP的什么状态码重返钦赐的页面;那里可用的状态码有400、403、40八、500、502、50叁和50肆;
<url>:Location首部中钦点的页面地点的求实途径,能够是在当前服务器上的页面包车型大巴相对路径,也得以选取相对路径;供给专注的是,如若U凯雷德I本人错误时发生某一定状态码新闻的话,有很大恐怕会招致循环定向;

例如:

backend webserver
  server 172.16.100.6 172.16.100.6:80 check maxconn 3000 cookie srv01
  server 172.16.100.7 172.16.100.7:80 check maxconn 3000 cookie srv02
  errorloc 403 /etc/haproxy/errorpages/sorry.htm
  errorloc 503 /etc/haproxy/errorpages/sorry.htm

跳过defaults配置段去安顿①台简单的负载均衡服务器

1.4.16 cookie和option redispatch

在backend服务器组启用cookie作用,以便实现cookie绑定。必要同时设置server指令中的cookie选项。

后端为静态服务器设置:
cookie NAME insert nocache
PHP做后端时设置:
cookie SESSION_COOKIE insert indirect nocache

当客户端绑定cookie对应的后端服务器宕机后,应该为此客户端重新调度一个后端server,否则将打不开页面。那时急需利用option
redispatch,表示当找不到cookie对应的服务器时分配新的服务器给客户端。

威尼斯人6799.com 5

1.4.17 reqadd和rspadd

reqadd  <string> [{if | unless} <cond>]
rspadd  <string> [{if | unless} <cond>]

满足条件时向请求首部或响应首部的尾端添加自定义的字段。条件可选,当不给定条件时表示拥有的乞求首部或响应首部尾端都添加字段。

中间string包罗了字段名和字段值,当然,既然是自定义,值肯定是可以归纳的。注意,空白字符须要转义。

例如:

acl is-ssl  dst_port      443
reqadd      X-Proto:\ SSL  if is-ssl

frontend 指的是代理的前端,  main是名字
 *:80
 全数地方都监听在80端口,default_backend:为frontend指明使用的暗中同意后

一.4.18 超时时间相关

日子单位暗中认可都以阿秒。

  • timeout http-request
    haproxy等待客户端请求发送完整的逾期时间长度。假若一初叶发送了一片段,后续未有再发送,恐怕一连发送的直白是请求的某一有个别,等高达超时时间将断开此一而再。这可防止备DoS攻击。
  • timeout queue
    当调度的后端服务器已经满负载了,即高达了该backend的最大并发连接数时,后续要调度到此backend的央浼将跻身队列等待后端服务器释放可用。该过期时间设置的便是某壹请求在队列中的最大等待时间长度,当达到此时间长度后将被认为该请求永远不可能抵达服务端,haproxy会甩掉该请求并向客户端重回50三状态码。
  • timeout connect 和retries
    haproxy要和后端服务器建立连接时等待超时时间。1般只要haproxy和后端服务器处于局域网中,建立连接是转眼之间的,所以该值能够设置的小片段。
    retries表示和服务端建立连接失利时重试连接的次数。
  • timeout client
    客户端和haproxy之间非活动三番五次保持的最大时间长度,达到此时间长度haproxy将断开和此客户端的连天。非活动表示客户端从未请求报文发送给haproxy。
  • timeout server
    服务端和haproxy之间非活动两次三番保持的最大时间长度,达到此时长haproxy将断开和此服务器的连天。非活动表示服务端未有响应报文发送给haproxy。
  • timeout http-keep-alive
    等候出现http请求报文出现的最大时间长度,即和客户端保持长连接的时间长度。建议安装小片段,以尽快释放连接,例如设置为二-3分钟。
    若果此项未安装,则使用timeout http-request值,假使timeout
    http-request也没设置,则应用timeout client的值。
  • timeout check
    在和服务端建立连接后,健康意况检查判断的超时时长。

端,使用use_backend:指明使用哪个后端

一.四.19 http说道过滤:http-request

http-request {allow | auth [realm <realm>] | redirect
<rule> | deny [deny_status <status>]} [{if | unless}
<condition>]

做七层http协议过滤。当http协议相关项满足条件时实施三个action,能够进行的action非常多,此处只列出了几项。

  • allow:表示接受该http请求。
  • auth:表示提醒输入用户认证新闻,内定realm时将交由提醒音信。
  • redirect:重定向作用。
  • deny:表示拒绝该http请求。

acl nagios src 192.168.129.3
acl local_net src 192.168.0.0/16
acl auth_ok http_auth(L1)

http-request allow if nagios
http-request allow if local_net auth_ok
http-request auth realm Gimme if local_net auth_ok
http-request deny

bind 能够用来钦命监听八个端口

1.四.20 tcp请求和响应过滤

tcp-request content <action> [{if | unless} <condition>]
tcp-response content <action> [{if | unless} <condition>]

做四层协议过滤。当满足条件时,haproxy对tcp请求或响应报文执行有个别action。

对此request而言,只可以用于listen和frontend。常用的action是accept和reject,表示满意条件时haproxy接受或拒绝该请求报文。

对此response而言,只可以用来listen和backend。常用的action是accept、reject和close,前双方表示满足条件时接受或拒绝该响应报文,close表示满意条件时立即关闭和服务端的连接。

backend 指的是代理的后端,
 叫做webservers

1.5 ACL

server 内定后端服务器
 web一内定名字背后是该server的ip地址 check
 健检评定单位为纳秒默许二秒检验一遍,  weight 权重私下认可

1.5.1 ACL语法

acl <aclname> <criterion> [flags] [operator]
[<value>] …

aclname:钦定acl的称呼,在引用时分别轻重缓急写。可任意钦定,且两个acl指令能够钦点同多少个aclname,那表示”或”的逻辑关系。
flags:可选用,表示标识位。壹般会用到的标识位唯有”-i”,表示不区分轻重缓急写。
operator:可挑选,有个别操作符,有”eq”、”ge”、”gt”、”le”、”lt”,表示数学上的对等、大于、小于。
<criterion>:内定检查标准,即检查格局。见下文给出的常用4层标准和7层标准
value:根据criterion的不等,值的连串分歧。

(一).4层常用检查标准,官方手册:https://cbonte.github.io/haproxy-dconv/1.7/configuration.html\#7.3.3

src <ip_addr>
src_port <PORT or PORT_ranges>
dst <ip_addr>
dst_port <PORT or PORT_ranges>

其中src、src_port、dst和dst_port即是反省标准creiterion,其后的值正是value。

例如:

acl accept_clients src 192.168.100.0/24
acl reject_clients src 172.16.0.0/16
tcp-request content accept if accept_clients
tcp-request content reject if reject_clients
tcp-request content reject  # 此项申明分裂盟前两项的默许都不肯

(二).七层常用检查标准,官方手册:https://cbonte.github.io/haproxy-dconv/1.9/configuration.html\#7.3.6

hdr(HEADE兰德酷路泽):检查首部字段的值是或不是为钦命的值,如hdr(Connection) -i
close代表首部字段Connection的值是还是不是为不区分轻重缓急写的close。hdr(Host) -i
www.bkjia.com表示首部字段Host的值是还是不是为www.bkjia.com,即请求的主机是还是不是是钦赐的值。

hdr_reg(HEADE陆风X捌):检查首部字段是还是不是协作钦定的方式。如hdr_reg(Host) -i
.*\.bkjia\.com。

http_first_req:当正处理的请求是首先个请求时回来true。

method:请求的章程为钦点的章程时回来方法对应的数值,也就象征true。例如”method
GET”。

  • acl valid_method method GET
  • http-request deny if ! valid_method

path:相称uri的path部分,壹般用来协作精确的文书能源。例如path -i
/a.png。

path_beg:相配path的前缀部分。

path_end:相配path的后缀部分。

path_reg:使用正则表达式来相配path。

url:对全体url实行相配。

url_beg:对url的前缀进行相配。

再有好多居多检查方式,愈来愈多的查询官方手册,太多了。一般四层的检查正式和7层对路线path和首部hdr的专业就够了。

三个尺码使用”AND”、”OCR-V”、”!”操作符表示逻辑与、逻辑或和取反,不写时暗许的操作符是”AND”。

为一,
backup指其余服务器都不可用时启用此server

一.5.贰 ACL达成情形分离示例

acl url_static path_beg /static /images /img /css /viedo /download  #
定义静态检查正式
acl url_static path_end .gif .png .jpg .css .js .bmp                #
定义静态检查标准
acl host_www  path /index.html                                    #
为主页专门定制acl
acl url_dynamic path_end .php .php5                                #
定义动态检查标准
acl host_www    hdr_beg(Host) -i www.bkjia.com                  #
定位到主页
use_backend static  if url_static
use_backend dynamic if url_dynamic
use_backend www if host_www

本文永久更新链接地址:https://www.bkjia.com/Linux/2018-03/151169.htm

http://www.bkjia.com/Linux/1308365.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linux/1308365.htmlTechArticleHAProxy配置文件详解和ACL功能 本文目录: 一.1配置文件表明 一.二 简单安插示例 1.三 全局配置参数 1.4.
proxy配置段和常用配置选项 1.四.一 http事务模…

balance: 指明调度算法;
动态:权重可动态调整
静态:调整权重不会实时生效

roundrobin:
轮询,动态算法,每一种后端主机最多帮助412十多个连续

static-rr:
轮询,静态算法,各种后端主机援助的数量无上限

leastconn:
依照后端主机的载荷数量进行调度;仅适用长连接的对话;动态

source
:将客户端源地址hash,并由后端服务器的权重相除后发送至相称的服务器,那使得同2个ip地址总会被发送给同壹台服务器,

暗许为静态

 

uri :将uri hash
此算法常用后端是代理缓存或反病毒代理以增加缓存命中率,默许为静态

url_param:
根据url中的钦点的参数的值实行调度;把值做hash计算,并除以总权重,暗中认可为静态

hdr(<name>) :依据请求报文中钦命的header(如use_agent,
referer, hostname)进行调度;把钦点的header的值做hash计

算,暗中认可为静态

在hash算法中 map-based是取模法,静态
consistent是一致性哈希法,动态  上边是叁个演示:

威尼斯人6799.com 6

 

 再说下check,haproxy暗中认可的正规检验时依照第6层的tcp协议,会依据配置对后端服务器的钦定端口进行检查测试

其余1种检验是基于http协议的第8层检查实验,有二种办法此处只介绍三种,第贰种:

威尼斯人6799.com 7

此种方法不推荐应用,在有点情状下会检验失误,比如后端是nginx+fpm时,本人亲测

 

第二种:

威尼斯人6799.com 8

此种检查评定方法(通过去后端服务器获取页面能源)能够确切检查评定服务是不是可用,推荐应用

常规检查测试还可钦定战败次数如: fall 三  
钦命检查实验时间间隔如: inter  一千

 

怎么样启用haproxy的场馆监察和控制页配置如下

威尼斯人6799.com 9

listen
它表示既是前者,又是后端,enable激活监察和控制页面,hide-version隐藏haproxy的本子,auth
用户密码验证 if TRUE admin

用户认证成功了将在监督页面的尾部打开调节和测试成效

 

威尼斯人6799.com 10

威尼斯人6799.com 11

 

haproxy达成另1个功力:基于浏览器cookie达成session
sticky

威尼斯人6799.com 12

投入了这几条指令: cookie serverid
insert(在响应报文中插入serverid) cookie websrv1当响应报文是web1出殡和埋葬回给

haproxy,haproxy重新创设响应首部时在Cookie首部插队serverid=websrv1,当客户端再一次请求时,haproxy就会依据首部中刚插

入的serverid再一次将请求调度到同样台服务器上

 

介绍defaults配置段的参数,defaults中的参数假若frotend和backend段都不曾定义暗许正是用defaults段的参数

威尼斯人6799.com 13

mode  定义haproxy工作在哪类格局http | tcp
  log  global  表示日志就利用全句段中定义的笔录日志方法 

httplog  充裕日志记录格式, dontlognull
不记录健检评定日志

 forwardfor if-none execpt x.x.x.x/mask
允许在发以后端服务器的呼吁首部中添加X-Forwarded-For首部
except排除哪些网

段, if-none
仅在X-Forwarded-For那么些首部不设有时才添加,假诺不钦点if-none那么回覆盖原来X-Forwarded-For,代理如若有

多元这么些if-none参数就务须了,那样做只是为着后端server记录真实的客户端ip地址 

redispatch
是不是同意将session重新分配到健康的后端服务器上(在与后端服务器session建立退步时)
redispatch代表同意 http-

server-close
一般http-keep-alive启用时它才起效果,允许haproxy端主动断开客户端的一而再(客户端建立了server连接但没发起

请求而且持久连接超时的图景下仍然客户端请求的财富达到自然个数)

三表示二回与后端服务器连接退步就肯定服务器不可用  queue
设定请求队列的晚点时间长度  http-request  等待客户端http请求超时时间长度

(假设客户端发送请求发了大体上但客户端挂了的场馆下)
http-keep-alive 钦命客户端与haproxy的持久连接超时时间长度, connect与

后端服务器成功建立tcp连接须求静观其变的过期时间长度,server等待后端服务器发送响应报文的逾期时间长度,client
 haproxy发送了响应报文

等候client分明的过期时间长度 maxconn
haproxy最多能建立多少个冒出连接

 

haproxy
还足以向响应报文首部添加自定义首部

威尼斯人6799.com 14

rspadd Via:\ nihao  
向对客户端的响应报文中添加Via首部,\是因为背后跟了多少个空格,要对空格转义

威尼斯人6799.com 15

 

haproxy
通过acl成效依照http请求报文中的请求方法达成对后端不一致服务器组的调度

威尼斯人6799.com 16

read 定义acl的名字,
method相称请求报文中首部Request Method的值

 if write 纵然相配write那条acl
就选用tag_engine那个服务器组(if前面如若给了八个名字则要同时满意)

 

haproxy通过acl达成动静网页分离

威尼斯人6799.com 17

 

这边的应用服务器小编使用了cookie做会话绑定,insert
后边加nocache是法定给出的建议

威尼斯人6799.com 18

如此那般就落到实处了情形分离 很简短吗