cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]
除了backend 都可用 在给用户的相应报文中插入cookie <name>:新插入cookie的名称 rewirte:重写;后端服务器可能已经有cookie 改写 insert:插入; prefix:前缀;例1 基于cookie的session sticky的实现:(会话保持)
backend websrvs
cookie WEBSRV insert nocache indirect
server srv1 172.16.100.6:80 weight 2 check rise 1 fall 2 maxconn 3000 cookie srv1
server srv2 172.16.100.7:80 weight 1 check rise 1 fall 2 maxconn 3000 cookie srv2
***********************************************************
统计接口启用相关的参数:
默认配置 stats enable 启用统计页;基于默认的参数启用stats page;- stats uri : /haproxy?stats 统计数据使用的url
- stats realm : "HAProxy\ Statistics" 域
- stats auth : no authentication
- stats scope : no restriction
stats auth <user>:<passwd>:认证时的账号和密码,可使用多次;
stats realm <realm>:认证时的realm; stats uri <prefix> 自定义stats page uri stats refresh <delay> 设定自动刷新时间间隔; stats admin { if | unless } <cond> 启用stats page中的管理功能配置示例:
listen stats bind :9099 stats enable stats realm HAPorxy\ Stats\ Page stats auth admin:admin 状态页面的账号密码 stats admin if TRUE 表示认证成功*********************************************************** option forwardfor [ except <network> ] [ header <name> ] [ if-none ] 在由haproxy发往后端主机的请求报文中添加“X-Forwarded-For”首部,其值前端客户端的地址;用于向后端主发送真实的客户端IP; [ except <network> ]:请求报请来自此处指定的网络时不予添加此首部; [ header <name> ]:使用自定义的首部名称,而非“X-Forwarded-For”;*********************************************************** errorfile <code> <file> 返回错误信息(只有后端服务器才知道),这里的错误码信息并不是值后端主机页面不存在,而大多是权限或重定向错误.因为haproxy本身并不知道后端页面信息 <code>:is the HTTP status code. Currently, HAProxy is capable of generating codes 200, 400, 403, 408, 500, 502, 503, and 504. <file>:designates a file containing the full HTTP response. 示例: errorfile 400 /etc/haproxy/errorfiles/400badreq.http errorfile 408 /dev/null # workaround Chrome pre-connect bug errorfile 403 /etc/haproxy/errorfiles/403forbid.http errorfile 503 /etc/haproxy/errorfiles/503sorry.http*********************************************************** errorloc <code> <url> 重新定义url 而不是文件*********************************************************** errorloc302 <code> <url> 直接把错误也重定向到另一个url 错误码也能修改*********************************************************** reqadd <string> [{if | unless} <cond>] 在请求报文尾部加新的http的首部信息 (添加给后端服务器的) rspadd <string> [{if | unless} <cond>] 发往客户端的响应报文.... reqdel <search> [{if | unless} <cond>] 在请求报文的http首部中删除 指定的首部 reqidel <search> [{if | unless} <cond>] (ignore case) 在请求报文的http首部中删除 指定的首部(不区分大小写) rspdel <search> [{if | unless} <cond>] 请发往客户端的http首部中删除 指定首部 rspidel <search> [{if | unless} <cond>] (ignore case) 在发往客户端的http首部中删除指定首部 (不区分大小写)*********************************************************** <search>支持正则表达式模式 timeout client <timeout> 客户端超时时常 (意思是已经建立链接,但客户端没有发送请求) 默认时间为毫秒 timeout server <timeout> 服务端超时失常 (意思是和后端建立链接,但没有发送响应报文) 默认单位毫秒 timeout http-keep-alive <timeout>持久连接的持久时长; 与客户端一侧的长连接 毫秒单位 timeout http-request <timeout> 当后端或客户端处于某种原因(导致步骤不一致时) 能保持的时常 毫秒 timeout connect <timeout> 建立tcp链接的等待时长 timeout client-fin <timeout> 客户端半关闭连接的超时时长(tcp会话四次断开过程中的等待时间) timeout server-fin <timeout> 服务器端半关闭连接的超时失长*********************************************************** use_backend <backend> [{if | unless} <condition>] 在条件满足时(不满足) 时,使用指定的backend (条件由acl控制) 当符合指定的条件时使用特定的backend;主要实现动静分离功能 path_beg 从字符前端匹配 path_end 从字符后端匹配*********************************************************** block { if | unless } <condition> 基于ACL条件满足时阻止一个7层请求例1 ***********************************************************http-request { allow | deny } [ { if | unless } <condition> ]
基于7层的访问控制机制 *********************************************************** tcp-request connection {accept|reject} [{if | unless} <condition>]基于4层请求所做的控制 示例:,(跟block参数并无太多区别,只是block只能拒绝) listen ssh bind :22022 balance leastconn acl invalid_src src 172.16.200.2 tcp-request connection reject if invalid_src mode tcp server sshsrv1 172.16.100.6:22 check server sshsrv2 172.16.100.7:22 check backup