global # 全局参数设置
log 127.0.0.1 local2 # log语法:log <address_1> [max_level_1] # 全局的日志配置,使用关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志
chroot /var/lib/haproxy # 改变当前工作目录
pidfile /var/run/haproxy.pid # 当前进程id文件
maxconn 4000 # 最大连接数
user haproxy # 所属用户
group haproxy # 所属用户组
daemon # 以守护进程方式运行haproxy
stats socket /var/lib/haproxy/stats # 指定了HAProxy实例的socket文件,可以在运行时想HAProxy发送各种命令来获取其内部的统计信息,只有具>有root权限的用户才能够连接到该套接字文件
defaults # 默认参数设置
mode http # 默认的模式{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 *:5000 # 负责接收客户端请求的部分,监听一组ip地址和端口,将请求转发给配置的backend,接收backend的响应并>将其发送回客户端。
# acl语法:acl <acl-name> <condition> [operator <condition>]...
# <acl-name>是ACL的名称,<condition>是ACL的条件,operator是条件之间的操作符可以是and/or/not。
# HAProxy中支持以下条件:
# - src <addr>:源IP地址;
# - dst <addr>:目标IP地址;
# - url <path>:请求url的路径;
# - path <path>:请求路径;
# - path_beg <path>:请求路径是否以<path>开头
# - hdr <name>:<value>:HTTP请求头中的键值对,name为键名,value为值
# - hdr_sub <name> <regexp>:HTTP请求头中某个键名中是否包含正则表达式<regexp>
# - hdr_beg <name> <value>:HTTP请求头中某个键名是否以<value>开头;
# - hdr_end <name> <value>:HTTP请求头中某个键名是否以<value>结尾;
# 下面的acl表示,如果路径以/static、/images、/javascript、/stylesheets开头
# 或者以.jpg、.git、.png、.css、.js结尾,就将请求定向到backend static,否则就使用默认的backend app
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 app
backend static # 使用了静态动态分离(如果url_path匹配.jpg .gif .png .css .js静态文件,则访问此后端
# balance:指定负载均衡算法,HAProxy支持的负载均衡算法有:
# - roundrobin:按照请求顺序,依次将请求分发给各个后端服务器。
# - static-rr:和roundrobin类似,但是每个后端服务器的权重是提前设置好的。
# - leastconn:将请求分发给当前连接数最少的后端服务器
# - source:根据客户端IP地址的hash值,将同一个客户端的请求发送到同一个后端服务器
# - uri:根据URI的hash值,将相同的URI的请求发送到同一个后端服务器。
# - url_param:根据URL参数的hash值,将带有相同URL参数的请求发送到同一个后端服务器
# - hdr(name):根据HTTP的消息头中指定的名称的hash值,将具有相同头信息的请求发送到同一个后端服务器。
# - rdp-cookie(name):根据指定名称的RDP cookie的hash值,将具有相同RDP cookie的请求发送到同一个后端服务器。
balance roundrobin # 负载均衡算法,roundrobin:轮询
# server语法:server <name> <address> [:<port>][param*]
# - <name>:后端服务器名称
# - <address>:后端服务器的IP地址或DNS名称
# - <port>:后端服务器的端口号,默认为80
# - [param*]:可选的参数,以空格分隔。常用的参数有
# - weight <value>:指定后端服务器的权重,值越高,接收到的请求就越多
# - check:检查后端服务器是否健康
# - maxconn <value>:限制与该后端服务器建立的最大连接数,默认为0
server static 127.0.0.1:4331 check
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check