标签:dns解析 并且 start 特性 成功 domain 表示 文本 地图
1
2
3
4
5
6
7
8
9
10
11
12
|
打开IP转发 echo "net.ipv4.ip_forward = 1" >> / etc / sysctl.conf && sysctl - p yum - y install gcc systemd - devel #安装依赖 tar xf haproxy - 1.8 . 7.tar .gz #解压 cd haproxy - 1.8 . 7 / make TARGET = linux2628 PREFIX = / usr / local / haproxy make install PREFIX = / usr / local / haproxy cp / usr / local / haproxy / sbin / haproxy / usr / sbin / cp . / examples / haproxy.init / etc / init.d / haproxy chmod 755 / etc / init.d / haproxy useradd - r haproxy mkdir / etc / haproxy |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
vim / etc / haproxy / haproxy.cfg # Global settings #--------------------------------------------------------------------- global #全局配置 log 127.0 . 0.1 local3 info #指定服务器的日志级别 chroot / usr / local / haproxy #改变工作目录 user haproxy #用户组和用户 group haproxy daemon #以守护进程的方式运行 maxconn 4000 #最大连接数 defaults #默认配置 log global mode http #7层http;4层tcp 如果要让haproxy支持虚拟主机,mode 必须设为http option httplog #http日志格式 timeout connect 5000 #连接超时(毫秒) timeout client 50000 #客户端超时(毫秒) timeout server 50000 #服务器超时(毫秒) listen stats mode http bind 10.0 . 0.19 : 1080 stats enable stats hide - version stats uri / stats stats admin if TRUE frontend web_front #前端配置 web_front名称可自定义 bind 10.0 . 0.19 : 80 #发起的http请求到80端口,会转发到设置的ip及端口 mode http log global option httplog # 启用http日志 default_backend http_back backend http_back #后端配置,http_back名称可自定义 option httpchk GET / index.html #设置健康检查页面 option forwardfor header X - Forwarded - For #传递客户端真实IP balance roundrobin #roundrobin 轮询方式 # 需要转发的ip及端口 server elk2 10.0 . 0.22 : 80 check inter 2000 rise 3 fall 3 weight 30 server elk1 10.0 . 0.21 : 80 check inter 2000 rise 3 fall 3 weight 30 server elk3 10.0 . 0.24 : 80 check inter 2000 rise 3 fall 3 weight 30 |
1
2
3
4
5
6
7
8
9
|
打开rsyslog配置: vi / etc / rsyslog.conf 去掉下面两行前面的 #号 $ModLoad imudp $UDPServerRun 514 并添加下面一行 local3. * / var / log / haproxy.log 重启rsyslog systemctl restart rsyslog |
1
|
service haproxy start |
1
2
3
4
5
6
7
|
chroot / usr / local / haproxy:禁锢根,haproxy进程以此目录作为根目录,防止haproxy进程被劫持而设定的安全性配置 user haproxy: 运行haproxy进程的用户和组 group haproxy: daemon:表示haproxy运行于后台守护进程,而非前台(调试模式) log 127.0 . 0.1 local3 info #local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别 pidfile / var / run / haproxy.pid #将所有守护进程的PID写入文件 maxconn 4000 #最大连接数 |
1
2
|
log <address> [ len <length> ] [ format < format > ] <facility> [ max level [ min level] ] 添加全局系统日志服务器。可以定义几个全局服务器。他们将接收启动和退出日志以及来自代理的所有日志 |
address
1
2
3
|
一个IPv4地址,可选地跟一个冒号和一个UDP端口。如果没有指定端口,默认使用 514 (标准系统日志港口)。 IPv6地址,后跟冒号和可选的UDP端口。如果没有指定端口,默认使用 514 (标准系统日志港口)。 记住一个UNIX域套接字的文件系统路径chroot的注意事项(确保路径可以在里面访问chroot)和uid / gid(确保路径适当可写)。 |
length可选最大行长度
日志行大于此值在被发送之前将被截断。原因是syslog服务器在日志行长度上的行为不同。所有的服务器都支持默认值为1024,但某些服务器只需放大较大的一行而其他人则会记录它们。如果服务器支持长行,它可能会在这里设置这个值是有意义的,以避免截断long线。同样,如果一台服务器丢掉长线,最好是在发送它们之前截断它们。可接受的值是80到65535包括的。默认值1024通常适用于所有标准用法。一些具体的长时间捕获或者说JSON格式的日志可能需要较大的值。你可能也需要如果您的请求URI被截断,请增“ tune.http.logurilen ”。
format生成系统日志消息时使用的日志格式
rfc3164 RFC3164系统日志消息格式。这是默认设置。 rfc5424 RFC5424系统日志消息格式。
facility必须是24个标准syslog工具之一
1
2
3
|
kern user mail daemon auth syslog lpr news uucp cron auth2 ftp ntp audit alert cron2 local0 local1 local2 local3 local4 local5 local6 local7 |
可以指定一个可选的级别来过滤传出的消息。默认,所有消息都被发送。如果指定了最大级别,则只有带有。的消息严重程度至少与本级别一样重要。可选的最小值级别可以指定。如果设置了,日志会以更严厉的级别发出比这个水平还要高。这用于避免发送某些默认系统日志配置中的所有终端上的“emerg”消息。
代理配置段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
defaults <name> #为frontend, backend, listen提供默认配置 frontend <name> # 前端,相当于nginx, server {} backend <name> #后端,相当于nginx, upstream {} listen <name>同时拥有前端和后端,适用于一对一环境 mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK log global #应用全局的日志配置 option httplog # 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志 option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来 option http - server - close #每次请求完毕后主动关闭http通道 option forwardfor except 127.0 . 0.0 / 8 #如果服务器上的应用程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项, 这样 HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段。启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP。 option redispatch #当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了, 但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。 retries 3 # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用 timeout http - request 10s #http请求超时时间 timeout queue 1m #一个请求在队列里的超时时间 timeout connect 10s #连接超时时间 timeout client 1m #客户端超时时间 timeout server 1m #服务器端超时时间 timeout http - keep - alive 10s #设置http-keep-alive的超时时间 timeout check 10s #检测超时时间 maxconn 3000 #每个进程可用的最大连接数 frontend main * : 80 #监听地址为80 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 my_webserver #定义一个名为my_app前端部分。此处将对应的请求转发给后端 backend static #使用了静态动态分离(如果url_path匹配 .jpg .gif .png .css .js静态文件则访问此后端) balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数) server static 127.0 . 0.1 : 80 check #静态文件部署在本机(也可以部署在其他机器或者squid缓存服务器) backend my_webserver #定义一个名为my_webserver后端部分。PS:此处my_webserver只是一个自定义名字而已,但是需要与frontend里面配置项default_backend 值相一致 balance roundrobin #负载均衡算法 server web01 172.31 . 2.33 : 80 check inter 2000 fall 3 weight 30 #定义的多个后端 server web02 172.31 . 2.34 : 80 check inter 2000 fall 3 weight 30 #定义的多个后端 server web03 172.31 . 2.35 : 80 check inter 2000 fall 3 weight 30 #定义的多个后端 |
1
2
3
|
balance:后端服务器组内的服务器调度算法 balance <algorithm> [ <arguments> ] balance url_param <param> [check_post] |
haproxy中调度算法同样分为动态调度算法和静态调度算法,与nginx调度算法中区分动静态调度算法的概念不同,nginx用能不能根据后端服务器的负载状况进行调度来区分动静态调度算法的差别,而haproxy中则根据该算法支不支持运行时的即时生效来区分动静态算法。
1
2
3
4
5
6
|
roundrobin:基于权重轮询,动态算法,支持权重的运行时调整,支持慢启动;每个后端backend中最多支持 4095 个 server server options: weight # static - rr:基于权重轮询,静态算法,不支持权重的运行时调整及慢启动;后端主机数量无上限 leastconn:加权最少连接,动态算法,最少连接的后端服务器优先分配接收新连接,相同连接时轮询,适用于长连接场景,例如 MySQL、LDAP等,不适合http first:根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务 source:源地址 hash ,新连接先按权重分配,后续连接按source分配请求 |
server <name> <address>[:[port]] [param*] 定义后端主机的各服务器及其选项 server <name> <address>[:port] [settings ...] default-server [settings ...] <name>:服务器在haproxy上的内部名称;出现在日志及警告信息 <address>:服务器地址,支持使用主机名 [:[port]]:端口映射;省略时,表示同bind中绑定的端口 [param*]:参数 check:对当前server做健康状态检测,只用于四层检测 注意:httpchk,“smtpchk”, “mysql-check”, “pgsql-check” and “sslhello-chk” 用于定义应用层检测方法 addr :检测时使用的IP地址 port :针对此端口进行检测 inter <delay>:连续两次检测之间的时间间隔,默认为2000ms rise <count>:连续多少次检测结果为“成功”才标记服务器为可用 ;默认为2 fall <count>:连续多少次检测结果为“失败”才标记服务器为不可 用;默认为3 cookie <value>:为当前server指定cookie值,实现基于cookie的会话黏性 disabled:标记为不可用 redir <prefix>:将发往此server的所有GET和HEAD类的请求重定向至指 定的URL weight <weight>:权重,默认为1最大值为256,0表示不参与负载均衡(不被调度) backlog <backlog>:当server的连接数达到上限后的后援队列长度 backup:设定当前server为备用服务器 default-server [param*] 为backend中的各server设定默认选项
stats enable启用统计页;基于默认的参数启用stats page stats uri : /haproxy?stats uri默认值 stats realm : HAProxy Statistics启用统计信息并设置身份验证领域 stats auth : no authentication 带有身份验证和授予访问帐户权限的统计信息 stats uri <prefix> 自定义stats page uri stats auth <user>:<passwd> 认证时的账号和密码,可使用多次 stats realm <realm> 认证时的realm stats hide-version 隐藏版本 stats refresh <delay> 设定自动刷新时间间隔 stats admin { if | unless } <cond> 启用stats page中的管理功能
timeout client <timeout> 客户端最长空闲连接超时时长 默认单位是毫秒 timeout server <timeout> 后端服务器最长空闲连接超时时长 timeout http-keep-alive <timeout> 持久连接的持久时长 timeout http-request <timeout> 一次完整的HTTP请求的最大等待时长 timeout connect <timeout> 成功连接后端服务器的最大等待时长 timeout client-fin <timeout> 客户端半连接的空闲时长 timeout server-fin <timeout> 后端服务器半连接的空闲时长
haproxy的ACL用于实现基于请求报文的首部、响应报文的内容或其他的环境状态信息来做出转发决策,这大大增加了其配置弹性。其配置法则一般分为两部,首先定义ACL,既定义一个测试条件,而后在条件得到满足时执行某特定动作,如阻止访问或者转发至某特定的后端。
acl <aclname> <criterion> [flags] [operator] [<value>] ...
1、aclname
ACL名称,区分字符大小写,且其只能包含大小写字母、数字、-(连接线)、_(下划线)、.(点号)和:(冒号);haproxy中,acl可以重名,这可以把多个测试条件定义为一个共同的acl;
2、criterion
指明检查条件,测试标准,即对什么信息发起测试;测试方式可以由[flags]指定的标志进行调整;而有些测试标准也可以需要为其在之前指定一个操作符[operator];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
条件 dst 目标IP dst_port 目标PORT src 源IP src_port 源PORT ```shell - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * 3 、[flags]:标识位 * * ```shell - i:在匹配所有后续模式时忽略大小写。 - f:从文件加载模式。 - m:使用特定的模式匹配方法 - n:禁止DNS解析 - M:像地图文件一样加载 - f指向的文件。 - u:强制ACL的唯一标识 - - :强制结束标志。 |
4、value类型
- boolean:真假 - integer or integer range:整数值 - IP address / network:IP地址、网络地址 - string (exact, substring, suffix, prefix, subdir, domain) 匹配指定的首部的值 exact:精确匹配 substring:子串匹配 suffix:后缀匹配 prefix:前缀匹配 subdir:子路径匹配 domain:域名子串匹配 - regular expression:正则表达式匹配 - hex block:16进制数字块
同一个acl中可以指定多个测试条件,这些测试条件需要由逻辑操作符指定其关系。条件间的组合测试关系有三种:“与”(默认即为与操作)、“或”(使用“||”操作符)以及“非”(使用“!”操作符)。
5、 [operator] 匹配整数值
eq、ge、gt、le、lt 匹配字符串: -m method : 指定模式匹配方法 其中flag中的 -m 选项可使用的模式匹配方法如下,需要说明的是有些方法已被默认指定无需声明,例如int,ip "found" : 只是用来探测数据流中是否存在指定数据,不进行任何比较 "bool" : 检查结果返回布尔值。匹配没有模式,可以匹配布尔值或整数,不匹配0和false,其他值可以匹配 "int" : 匹配整数类型数据;可以处理整数和布尔值类型样本,0代表false,1代表true "ip" : 匹配IPv4,IPv6地址类型数据。该模式仅被IP地址兼容,不需要特别指定 "bin" : 匹配二进制数据 "len" : 匹配样本的长度的整数值 "str" : 精确匹配,根据字符串匹配文本 "sub" : 子串匹配,匹配文本是否包含子串 "reg" : 正则匹配,根据正则表达式列表匹配文本 "beg" : 前缀匹配,检查文本是否以指定字符串开头 "end" : 后缀匹配,检查文本是否以指定字符串结尾 "dir" : 子目录匹配,检查部分文本中以" / "作为分隔符的内容是否含有指定字符串 "dom" : 域匹配。检查部分文本中以" . "作为分隔符的内容是否含有指定字符串
配置支持ssl会话 bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE ssl:要求必须使用 ssl会话 crt:指明证书文件路径 –> 证书和私钥都在这个文件内 把80端口的请求重向定443 bind *:80 redirect scheme https if !{ ssl_fc } scheme:协议 ssl_fc:如果请求的是非ssl前端的,则重定向(无需定义,因为是內建的,直接调用 ssl_fc) 向后端传递用户请求的协议和端口 http_request set-header X-Forwarded-Port %[dst_port] http_request add-header X-Forwared-Proto https if { ssl_fc }
标签:dns解析 并且 start 特性 成功 domain 表示 文本 地图
原文地址:https://www.cnblogs.com/strugksjncxa/p/11256016.html