haproxy配置
Posted xwupiaomiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haproxy配置相关的知识,希望对你有一定的参考价值。
一、配置文件
#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 #[err warning info debug] chroot /usr/local/haproxy-1.7.3 pidfile /var/run/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 maxconn 4000 #最大连接数,默认4000 user haproxy group haproxy daemon #创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon" #--------------------------------------------------------------------- # common defaults that all the ‘listen‘ and ‘backend‘ sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode http #默认的模式,tcp是4层,http是7层,health只会返回OK 若是混合模式则 mode 不需要设置 log global #采用全局定义的日志 option dontlognull #不记录健康检查的日志信息 option httpclose #每次请求完毕后主动关闭http通道 option httplog #日志类别http日志格式 混合模式 此处还需要加上 tcplog #option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器 timeout http-request 10s #http请求超时时间 timeout queue 1m #一个请求在队列里的超时时间 timeout connect 10s #连接后端服务器超时 timeout client 10s #客户端连接超时 timeout server 10s #服务器连接超时 timeout http-keep-alive 10s #设置http-keep-alive的超时时间 timeout check 10s #检测超时 maxconn 60000 #最大连接数 retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置 ########监控页面配置######## listen admin_stats bind 0.0.0.0:8089 #监听端口 stats enable #启用状态监控 mode http log global stats uri /stats #监控页面URL访问路径 stats realm HaproxyStatistics #监控页面密码框上提示文本 stats auth admin:admin #监控页面用户名和密码设置 #stats hide-version #隐藏监控页面上HAProxy的版本信息 stats admin if TRUE #当通过认证才可管理 stats refresh 30s #统计页面自动刷新时间(有些版本该选项已取消) ########WEB配置################# listen web1080 bind 0.0.0.0:1080 mode http option httplog log global maxconn 3000 balance leastconn server web33 192.168.80.33:8007 cookie 1 check inter 2000 rise 3 fall 3 weight 2 server web34 192.168.80.34:8007 cookie 2 check inter 2000 rise 3 fall 3 weight 1 server web35 192.168.80.35:8007 cookie 3 check inter 1500 rise 3 fall 3 backup #定义后端服务器的内部名称[web33,web34,web35],该名称将会呈现在日志或警报中 #后端服务器的IP地址,支持端口映射[192.168.80.33:8007] #指定该服务器的SERVERID为1[cookie 1] #健康监测频率[check inter 2000]、监测的间隔时长,单位毫秒 #监测正常3次后被认为后端服务器是可用的[rise 3] #监测失败3次后被认为后端服务器是不可用的[fall 3] #分发的权重[weight 2]、最为备份用的后端服务器,当正常的服务器全部都宕机后,才会启用备份服务器[backup] #--------------------------------------------------------------------- # main frontend which proxys to the backends 这里不需要动静分离,所以全部注释掉 #--------------------------------------------------------------------- #frontend main *:5000 # acl url_static path_beg -i /static /images /javascript /stylesheets # acl url_static path_end -i .jpg .gif .png .css .js # use_backend static if url_static # default_backend app #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin # server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- #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 #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- #errorloc 503 http://www.osyunwei.com/404.html 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
二、acl规则
acl acl名称 acl方法 -i [匹配的路径或者方法]
-i:表示不区分大小写,后边跟上匹配的路径或文件或正则表达式
常用的acl方法:
1. be_sess_rate(backend) <integer>
用于测试指定的backend上会话创建的速率(即每秒创建的会话数)是否满足指定的条件;常用于在指定backend上的会话速率过高时将用户请求转发至另外的backend,或用于阻止攻击行为。例如:
backend dynamic
mode http
acl being_scanned be_sess_rate gt 50
redirect location /error_pages/denied.html if being_scanned
2. fe_sess_rate(frontend) <integer>
用于测试指定的frontend(或当前frontend)上的会话创建速率是否满足指定的条件;常用于为frontend指定一个合理的会话创建速率的 上限以防止服务被滥用。例如下面的例子限定入站邮件速率不能大于50封/秒,所有在此指定范围之外的请求都将被延时50毫秒。
frontend mail
bind :25
mode tcp
maxconn 500
acl too_fast fe_sess_rate ge 50
tcp-request inspect-delay 50ms
tcp-request content accept if ! too_fast
tcp-request content accept if WAIT_END
3. hdr(header) <string>
用于测试请求报文中的所有首部或指定首部是否满足指定的条件;指定首部时,其名称不区分大小写,且在括号“()”中不能有任何多余的空白字符。测试服务器 端的响应报文时可以使用shdr()。例如下面的例子用于测试首部Connection的值是否为close。
hdr(Connection) -i close
4. method <string>
测试HTTP请求报文中使用的方法。
5. path_beg <string>
用于测试请求的URL是否以<string>指定的模式开头。下面的例子用于测试URL是否以/static、/iilannis、/javascript或/stylesheets开头。
acl url_static path_beg -i /static /iilannis /javascript /stylesheets
6. path_end <string>
用于测试请求的URL是否以<string>指定的模式结尾。例如,下面的例子用户测试URL是否以jpg、gif、png、css或js结尾。
acl url_static path_end -i .jpg .gif .png .css .js
7. hdr_beg <string>
用于测试请求报文的指定首部的开头部分是否符合<string>指定的模式。例如,下面的例子用记测试请求是否为提供静态内容的主机img、video、download或ftp。
acl host_static hdr_beg(host) -i img. video. download. ftp.
8. hdr_end <string>
用于测试请求报文的指定首部的结尾部分是否符合<string>指定的模式。例如,下面的例子用记测试请求是否为
9. hdr_reg <string>
正则匹配
acl bbs hdr_reg(host) -i ^(bbs.test.com|shequ.test.com|forum)
use_backend bbs_pool if bbs || bbs_path
acl关键字可用在frontend、listen、backend中,不能用在default中
同一个acl中可以指定多个测试条件,这些测试条件需要由逻辑操作符指定其关系。条件间的组合测试关系有三种:
“与”(默认即为与操作),例:
frontend web_server
bind *:80
acl badguy src 10.0.10.1
acl denyfile path /1.html
http-request deny if badguy denyfile
“或”(使用“||”操作符),例:
frontend web_server
bind *:80
acl badguy src 10.0.10.1
acl denyfile path /1.html
http-request deny if badguy || denyfile
“非”(使用“!”操作符),例:
frontend web_server
bind *:80
http-request deny if ! badguy
参考链接:
https://www.linuxidc.com/Linux/2018-03/151169.htm #haproxy配置详解
https://cbonte.github.io/haproxy-dconv/ #haproxy官方文档
以上是关于haproxy配置的主要内容,如果未能解决你的问题,请参考以下文章