Haproxy位置
配置段
-
global:全局配置段
- 进程及安全配置相关的参数
- 性能调整相关参数
- Debug参数 proxies:代理配置段
- defaults:为frontend, backend, listen提供默认配置
- fronted:前端,相当于nginx, server {}
- backend:后端,相当于nginx, upstream {}
- listen:同时拥有前端和后端,适用于一对一环境
示例:
frontend web
bind *:80
default_backend websers
backend websers
server ser1 192.168.6.6:80 check
server ser1 192.168.6.7:80 check
全局配置 global
进程及安全管理: chroot, deamon, user, group, uid, gid
nbproc :要启动的haproxy的进程数量,系统默认单进程,要求使用daemon模式
ulimit-n :每个haproxy进程可打开的最大文件数,系统自动会指定,不建议设置daemon 后端方式运行,建议使用
log:定义全局的syslog服务器;最多可以定义两个log<address> [len <length>] <facility> [max level[min level]]
address: rsyslog服务器地址
len: 记录日志的长度,默认1024
记录日志
# 默认发往本机的日志服务器;
vi /etc/rsyslog.conf
(1) local2.* /var/log/haproxy.log
(2) 去掉注释
$ModLoad imudp
$UDPServerRun 514
远端记录日志
# haproxy配置文件
log 远端服务器IP local2
# 发往远端的日志服务器;
vi /etc/rsyslog.conf
(1) local2.* /var/log/haproxy.log
(2) 去掉注释
$ModLoad imudp
$UDPServerRun 514
日志管理
capture cookie <name> len <length>
:捕获请求和响应报文中的 cookie并记录日志
capture request header <name> len <length>
:捕获请求报文中指定的首部并记录日志
示例:
capture request header X-Forwarded-For len 15
capture response header <name> len <length>
捕获响应报文中指定的首部并记录日志
示例:
capture response header Content-length len 9
capture response header Location len 15
性能调整:
maxconn <number>
设定每个haproxy进程所能接受的最大并发连接数maxconnrate <number>
设置每个进程每秒种所能建立的最大连接数量maxsessrate <number>
设置每个进程每秒种所能建立的最大会话数量maxsslconn <number>
每进程支持SSL的最大连接数量spread-checks <0..50, in percent>
健康检测延迟时长比建议2-5之间
代理配置段 proxies
defaults <name>
frontend <name>
backend <name>
listen <name>
配置参数
bind:指定一个或多个前端侦听地址和端口
bind [<address>]:<port_range> [, ...] [param*]
balance:后端服务器组内的服务器调度算法
server <name> <address>[:[port]] [param*]
定义后端主机的各服务器及其选项
server <name> <address>[:port] [settings ...]
default-server [settings …] #为backend中的各server设定默认选项
<name>
:服务器在haproxy上的内部名称;出现在日志及警告信息
<address>
:服务器地址,支持使用主机名
[:[port]]:端口映射;省略时,表示同bind中绑定的端口
[param*]:参数
weight :权重,默认为1
maxconn :当前后端server的最大并发连接数
backlog :当server的连接数达到上限后的后援队列长度
backup:设定当前server为备用服务器Sorry Server
check:对当前server做健康状态检测,只用于四层检测
注意: httpchk, “smtpchk”, “mysql-check”, “pgsqlcheck” and “ssl-hello-chk” 用于定义应用层检测方法
addr :检测时使用的IP地址
port :针对此端口进行检测
inter <delay>
:检测之间的时间间隔,默认为2000ms
rise <count>
:连续多少次检测结果为“成功”才标记服务器为可用;默认为2
fall <count>
:连续多少次检测结果为“失败”才标记服务器为不可用;默认为3
disabled:标记为不可用
redir <prefix>
:将发往此server的所有GET和HEAD类的请求重定向至指定的URL
统计接口启用相关的参数
stats enable
启用统计页;基于默认的参数启用stats page
stats uri : /haproxy?stats uri #默认uri
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中的管理功能
配置示例:
listen stats
bind :9999
stats enable #启用统计功能
stats realm HAPorxy\ Stats\ Page
stats auth admin1:password1
stats auth admin1:password2
stats refresh 3s
stats admin if TRUE
工作模式
maxconn <conns>
:为指定的frontend定义其最大并发连接数;默认为3000
fullconn <conns>
:backend连接数
mode { tcp|http|health } #在default里定义的默认是http
定义haproxy的工作模式
tcp:基于layer4实现代理;可代理mysql, pgsql, ssh,ssl等协议,https时使用此模式,默认模式
http:仅当代理协议为http时使用,centos实际默认模式
health:工作为健康状态检查的响应模式,当连接请求到达时应“OK”后即断开连接,较少使用
错误页配置
errorfile 自定义错误页
<code>
: HTTP status code.支持200, 400, 403, 408, 500, 502, 503, 504.
<file>
:错误页文件路径
示例:
errorfile 400 /etc/haproxy/errorfiles/400badreq.http
errorfile 408 /dev/null # workaround Chrome preconnect bug
errorfile 403 /etc/haproxy/errorfiles/403forbid.http
errorfile 503 /etc/haproxy/errorfiles/503sorry.http
修改报文首部
在请求报文尾部添加指定首部
reqadd <string> [{if | unless} <cond>]
在响应报文尾部添加指定首部
rspadd <string> [{if | unless} <cond>]
示例:
rspadd X-Via:\ HAPorxy
从请求报文中删除匹配正则表达式的首部
reqdel <search> [{if | unless} <cond>]
reqidel <search> [{if | unless} <cond>] 不分大小写
从响应报文中删除匹配正则表达式的首部
rspdel <search> [{if | unless} <cond>]
rspidel <search> [{if | unless} <cond>] 不分大小写
示例:
rspidel server.*
配置HAProxy支持https协议
# 在前端加上以下3句
frontend web
bind 172.18.253.6:80
redirect scheme https if ! { ssl_fc } #如果请求没有https则重定向https
bind 172.18.253.6:443 ssl crt /etc/haproxy/haproxy.pem