HAProxy配置文件详解和ACL功能(8)

errorloc303 <code> <url>
请求错误时,返回一个HTTP重定向至某URL的信息给客户端;可用于所有配置段中。
<code>:指定对HTTP的哪些状态码返回指定的页面;这里可用的状态码有400、403、408、500、502、503和504;
<url>:Location首部中指定的页面位置的具体路径,可以是在当前服务器上的页面的相对路径,也可以使用绝对路径;需要注意的是,如果URI自身错误时产生某特定状态码信息的话,有可能会导致循环定向;

例如:

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

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对应的服务器时分配新的服务器给客户端。

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

1.4.18 超时时间相关

时间单位默认都是毫秒。

timeout http-request
haproxy等待客户端请求发送完整的超时时长。如果一开始发送了一部分,后续没有再发送,或者后续发送的一直是请求的某一部分,等达到超时时间将断开此连接。这可以防止DoS攻击。

timeout queue
当调度的后端服务器已经满负载了,即达到了该backend的最大并发连接数时,后续要调度到此backend的请求将进入队列等待后端服务器释放可用。该超时时间设置的就是某一请求在队列中的最大等待时长,当达到此时长后将被认为该请求永远无法到达服务端,haproxy会丢弃该请求并向客户端返回503状态码。

timeout connect 和retries
haproxy要和后端服务器建立连接时等待超时时间。一般如果haproxy和后端服务器处于局域网中,建立连接是瞬间的,所以该值可以设置的小一些。
retries表示和服务端建立连接失败时重试连接的次数。

timeout client
客户端和haproxy之间非活动连接保持的最大时长,达到此时长haproxy将断开和此客户端的连接。非活动表示客户端没有请求报文发送给haproxy。

timeout server
服务端和haproxy之间非活动连接保持的最大时长,达到此时长haproxy将断开和此服务器的连接。非活动表示服务端没有响应报文发送给haproxy。

timeout http-keep-alive
等待出现http请求报文出现的最大时长,即和客户端保持长连接的时长。建议设置小一些,以尽快释放连接,例如设置为2-3秒钟。
如果此项未设置,则使用timeout http-request值,如果timeout http-request也没设置,则使用timeout client的值。

timeout check
在和服务端建立连接后,健康状况检查判断的超时时长。

1.4.19 http协议过滤:http-request

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

做7层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

1.4.20 tcp请求和响应过滤

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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8859b78c5f683a11c8d486dc0ccf0c06.html