Haproxy高级功能配置
一、基于cookie的会话保持
1.cookie value:当前server指定的cookie值,实现基于cookie的会话粘性,不支持tcp mode需要指定为http mode
2.配置选项:
name: cookie的key名称,用于实现持久连接
insert: 插入新的cookie,默认不插入cookie
indirect: 如果客户端已经有cookie,则不会再发送cookie信息
nocache: 当client和proxy之间有缓存服务器时,不允许中间缓存器缓存cookie,因为这会导致很多经过同一个cdn的请求都发送到同一台后端服务器
配置示例:
listen webserver_80
bind 172.25.254.100:80
option forwardfor
mode http
balance roundrobin
cookie WEBCOOKIE insert nocache indirect
server webserver1 192.168.0.101:80 cookie web1 weight 1 check inter 3s fall 3 rise 5
server webserver1 192.168.0.101:80 cookie web1 weight 1 check inter 3s fall 3 rise 5
3.状态页配置项
stats enable 基于默认的参数启用stats page
stats hide-version 将状态页中haproxy版本隐藏
stats refresh <delay> 设置自动刷新时间间隔,默认不自动刷新
stats uri <prefix> 自定义stats page uri,默认值为:/haproxy?stats
stats auth <user>:<passwd> 认证时的账号和密码,可以定义多个用户,每行指定一个用户,默认为:no authentication
启用状态页:
listen stats:
mode http
bind 0.0.0.0:8888
stats enable
log global
stats uri /status
stats auth test:test
二、IP透传
1.web服务器中需要记录客户端真实的ip地址用来做访问统计、安全防护、行为分析、区域排行
2.四层透传配置信息
listen webserver_80
bind 172.25.254.100:80
mode tcp
balance roundrobin
server webserver1 192.168.0.101:80 send-proxy weight 1 check inter 3s fall 3 rise 5
server webserver2 192.168.0.102:80 send-proxy weight 1 check inter 3s fall 3 rise 5
通过tail -n 3 /var/log/nginx/acces.log可以查看测试连接过程中的信息
3.七层ip透传配置:
由haproxy发往后端主机的请求报文中添加” X-Forwarded-For“首部,其值为前端客户端的地址用于向后端主机发送真实的客户端ip
listen webserver_80
option forwardfor
bind 172.25.254.100:80
mode tcp
balance roundrobin
server webserver1 192.168.0.101:80 send-proxy weight 1 check inter 3s fall 3 rise 5
server webserver2 192.168.0.102:80 send-proxy weight 1 check inter 3s fall 3 rise 5
4.web服务器日志格式配置:配置web服务器,记录负载均衡透传的客户端的ip地址
apache配置:
LogFormat "%{X-Forward-For}i %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
其中 %{X-Forward-For}i通常用于记录客户端的真实ip地址
%a,发起请求的客户端的ip地址,如果请求时经过代理服务器转发会记录代理服务器的ip地址
%l,记录远程登录用户的身份,如果未设置会记录为 -
%u,这个字段记录请求的用户名,没有会记录为-
%t,请求的时间戳,记录到达服务器的时间
%r,记录了请求的第一行,包含请求方法路径和协议
%>s,记录http响应的状态码
%b,记录了响应的字节数(不包含http头部)
%{Referer}i,记录请求头中的referer字段
%{User-Agent}i,包含关于客户端浏览器、操作系统的详细信息
combined,表示该格式包含了标准的combined log format
nginx 日志格式:
$proxy_add_x_forwarded_for: 包括客户端ip和中间经过的所有代理ip
$http_x_forwarded_For: 只有客户端ip
log_format main ' "$proxy_add_x_forwarded_for" - $remote_user [$time_local] "$request" '
' $status $body_bytes_sent "$http_referer" '
' "$http_user_agent" $http_x_forwarded_For ' ;
二、ACL:访问控制列表,一种基于包过滤的访问控制技术
1.可以根据设定的条件对服务器传输的数据包进行过滤(条件匹配),对接收到的报文进行匹配和过滤,可以根据请求报文中的源地址、源端口、目标地址、目标端口】请求方法、url、文件后缀等信息内容进行匹配并执行进一步操作
2.acl格式:
acl <aclname> <criterion> [flags] [operator] [<values>]
acl 名称 匹配规范 匹配模式 具体操作符 操作对象类型
acl 匹配规范:
hdr string,提取在一个http请求报文的首部
hdr ([<name> [,<occ>]]) 完全匹配字符串,header的指定信息,<occ>表示在多值中使用的值的出现次数
hdr_beg ([<name> [,<occ>]]) 前缀匹配,header中指定内容的begin
hdr_end([<name> [,<occ>]]) 后缀匹配,header中指定内容的end
hdr_dom 域匹配,header中domain name
hdr_dir 路径匹配,header中的uri
hdr_len 长度匹配,header的长度匹配
hdr_reg 正则表达式匹配
hdr_sub 子串匹配
acl-flags匹配模式
-i 不区分大小写
-m 使用指定的正则表达式匹配方法
-n 不做dns解析
-u 禁止acl重名,否则多个同名的acl匹配或关系
acl-operator具体操作符
整数比较:eq、ge、gt、le、lt
字符比较:exact match :字符串必须完全匹配模式……
acl-value操作对象
Boolean 布尔值 integer or integer range 整数或整数范围用于端口匹配
IP address /network ip地址或IP范围 String
regular expression 正则表达式 hex block 16进制
多个acl逻辑处理
域名匹配配置
acl web_host hdr_dom(host) www.xiao.org
use_backend xiao_host if web_host(允许访问)
http-reauest deny if web_host(拒绝访问)
default_backend default_webserver
backend xiao_host
mode http
server web1 192.168.0.101:80 check weight 1 inter 3s fall 3 rise 5
server web2 192.168.0.102:80 check weight 1 inter 3s fall 3 rise 5
backend default_webserver
mode http
server web1 172.25.254.10:80 check weight 1 inter 1 inter 3s fall 3 rise 5
三、自定义haproxy错误界面
1.对指定的错误进行重定向优雅的显示错误界面
创建错误页面文件:mkdir /haproxy/errorpages/ -p
cp /usr/share/haproxy/503.http /haproxy/errorpages/503page.http
关闭后端的rs主机用浏览器访问haproxy的Ip地址