haproxy
的安装可以参考:https://blog.csdn.net/qq_50247813/article/details/148712372
所有的配置指令可以参考:https://docs.haproxy.org/3.2/configuration.html
# "global"部分中的参数是进程范围内的,并且通常是操作系统特定的。它们通常只需设置一次,一旦设置正确就不需要更改。
global
#表示所有相对文件应从该目录加载包含配置文件的目录
default-path config
# 如果在启动时有任何警告信息出现,则拒绝启动(保持配置文件的整洁)
zero-warning
# 切换根目录,增强安全性(默认 /)
chroot /var/empty
#指定运行 HAProxy 的用户和组,也可使用uid,gid关键字替代之
user haproxy
group haproxy
# 以后台守护进程模式运行
daemon
#设置进程 ID 文件路径(默认由系统管理,多实例隔离时,需为每个实例指定不同的 PID 文件)
#pidfile /var/run/haproxy-svc1.pid
# 表示 HAProxy 在接收到软停止信号后,最多允许 30 秒的时间来进行清理和停止操作
hard-stop-after 30s
# 监控各种统计信息输出
stats socket /var/run/haproxy-svc1.sock level admin mode 600 user haproxy expose-fd listeners
# 统计信息套接字的默认超时时间为10 秒
stats timeout 30s
# 将日志发送至rsyslog服务
log 127.0.0.1 local2 info
# 指定自身算法的“绑定”行设置默认的描述协商过程中 SSL/TLS 握手所使用的密码算法列表(即“密码套件”)的字符串。
# ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
#指定 HAProxy 在处理 SSL/TLS 连接时,默认使用的 TLS 密码套件(Cipher Suites)。
#ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
#用于配置默认绑定的 SSL/TLS 选项的参数
#ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
# 默认部分的定义
defaults http
# #设置代理模式(http七层|tcp四层|health健康检测,默认 tcp)
mode http
# 启用详细的 HTTP 日志记录(httplog/tcplog)
option httplog
# 使用全局日志配置
log global
# 客户端发送数据的最大超时时间
timeout client 1m
# 服务器响应数据的最大超时时间
timeout server 1m
# 客户端与服务器建立连接的最大超时时间
timeout connect 10s
# session会话保持超时时间,此时间段内会转发到相同的后端服务器
timeout http-keep-alive 2m
# 定义放入这个队列的超时时间。当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中。
timeout queue 15s
# 在客户端和服务器端为隧道设置最长的无操作时间限制。
timeout tunnel 4h # for websocket
# 定义一个名为 stats的前端
frontend stats
# 监听IPV4 8181端口
bind :8181
# 提供高级统计数据和监控
stats uri /
stats show-modules
# 设置监控的登录账号密码
stats auth admin:mystats
# 设置源IP
stats admin if { src 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8 }
# 定义一个名为 pub1的前端
frontend pub1
# 绑定到本地的80端口,并为端口起一个别名 clear
bind :80 name clear
# 绑定到本地的443端口,并为端口起一个别名 secure ;ssl启用 SSL/TLS 加密,crt pub1.pem 指定证书 pub1.pem
#bind :443 name secure ssl crt pub1.pem
# 启用统计套接字的统计信息收集功能,使得可以通过统计套接字(如 stats socket /var/run/haproxy-svc1.sock)获取到每个监听端口(80 和 443)的详细统计信息。启动了统计信息收集可能会对性能产生一定影响。
option socket-stats
# 启用 QUIC 协议支持并配置相关参数。
.if feature(QUIC)
# 在 443 端口绑定 QUIC 协议,指定监听名称为 quic,使用 SSL/TLS 加密,证书文件为 pub1.pem,并允许 0-RTT(零往返时间)连接,0-RTT 可以减少连接建立的延迟,提高性能。
bind quic4@:443 name quic ssl crt pub1.pem allow-0rtt
# 在 HTTP 响应中添加 alt-svc 头,表示服务器支持 HTTP/3(通过 QUIC 协议),并设置该服务的有效期为 25 小时(ma=90000,单位为秒),让客户端知道可以通过 HTTP/3 访问该服务。
http-response add-header alt-svc 'h3=":443"; ma=90000'
.endif
# 在所有响应完成后,将 HSTS 设置为一年有效期。
http-after-response set-header Strict-Transport-Security "max-age=31536000"
# 将http请求重定向到https
http-request redirect scheme https code 301 if !{ ssl_fc }
# 用于控制是否忽略某些连接请求,主要用于处理连接探测和预连接等没有实际 HTTP 请求内容的连接。
option http-ignore-probes
# 在将客户端请求转发到后端服务器之前,删除请求中已有的 X-Forwarded-For 头。
http-request del-header x-forwarded-for
# 转发请求时添加或更新 X-Forwarded-For 头,将客户端的真实 IP 地址传递给后端服务器。
option forwardfor
# 在 HAProxy 中用于启用 HTTP 压缩功能,并指定使用 deflate 和 gzip 压缩算法
compression algo deflate gzip
# 在启用压缩功能时,会对下面的 MIME 类型的内容进行压缩。
compression type text/ application/javascript application/xhtml+xml image/x-icon
# 用于在处理 HTTP 请求时启用缓存功能
http-request cache-use cache
# 在处理 HTTP 响应时将响应内容存储到缓存中的
http-response cache-store cache
# 指定默认的后端服务器组,后端组必须存在否则无法启动
default_backend app1
# 定义了一个名为 cache 的缓存实例。
cache cache
# 设置 HAProxy 缓存的总内存限制单位是MB,当缓存达到上限就会清理就数据
total-max-size 200
# 设置缓存中可存储的单个最大对象大小(以字节为单位)
max-object-size 10485760
# 指定缓存内容的最大生存时间默认是秒,过期后,HAProxy 会从后端服务器重新获取内容。
max-age 3600
# 是否处理“Vary”标头
process-vary on
# 定义一个名为 app1 的后端部分
backend app1
# 轮询策略
balance random
# 当客户端关闭连接时,HAProxy会强制关闭与后端服务器的连接,通过关闭慢连接,可以避免后端服务器继续处理已经不再需要的请求,从而释放系统资源,提高整体性能。
option abortonclose
# cookie app1 HTTP 响应中插入一个名为 app1 的 Cookie,用于标识客户端的会话;indirect表示HAProxy会根据后端服务器的响应动态设置Cookie的值而不是直接使用固定的值;nocache 表示禁用对 Cookie 的缓存,确保每次请求都会重新生成或更新 Cookie 的值。
cookie app1 insert indirect nocache
# 启用 HTTP 健康检查
option httpchk
# 定义了自定义的 HTTP 健康检查请求
http-check send meth GET uri / ver HTTP/1.1 hdr host svc1.example.com
# 后端服务器配置
# server srv1 给后端服务器起名,192.0.2.1:80后端服务器ip端口,为该服务器分配一个名为 s1 的 Cookie 标识符,maxconn 100 :限制该服务器的最大并发连接数为 100,check :启用对服务器的健康检查。inter 1s :设置健康检查的间隔时间为 1 秒。
server srv1 192.0.2.1:80 cookie s1 maxconn 100 check inter 1s
server srv2 192.0.2.2:80 cookie s2 maxconn 100 check inter 1s
server srv3 192.0.2.3:80 cookie s3 maxconn 100 check inter 1s
server srv4 192.0.2.4:80 cookie s4 maxconn 100 check inter 1s
观察上述配置可以看出,按模块区分可以分为,global
、defaults
、backend
、cache
、其实还有一个 listen
、userlist
,下面介绍每个模块都起什么作用。
1. 全局配置(global)
定义适用于整个 HAProxy 实例的全局参数。
- 日志配置:指定日志记录的位置和级别,例如 log 127.0.0.1 local2 info。
- 用户和组:指定 HAProxy 运行的用户和组,例如 user haproxy 和 group haproxy。
- 守护进程模式:将 HAProxy 作为守护进程运行,使用 daemon。
- 统计套接字:配置用于管理和监控 HAProxy 的统计套接字,例如 stats socket /var/run/haproxy.sock。
2. 默认配置(defaults)
定义适用于所有前端和后端的默认参数。
- 模式:设置 HAProxy 的工作模式(如 HTTP 或 TCP),例如 mode http。
- 日志选项:启用或禁用日志记录,例如 log global。
- 超时设置:定义连接和请求的超时时间,例如 timeout connect 5000ms。
- 重试次数:设置连接失败时的重试次数,例如 retries 3。
3. 前端配置(frontend)
定义 HAProxy 如何监听客户端的请求。
- 绑定端口:指定 HAProxy 监听的端口,例如 bind :80。
- 默认后端:指定默认的后端服务器组,用于处理未明确指定的请求,例如 default_backend http_back。
- 请求处理:可以定义如何处理请求,如重定向、缓存等。
- 后端配置(backend)
4. 后端配置(backend)
定义一组后端服务器,用于处理前端转发的请求。
- 负载均衡策略:定义负载均衡算法(如轮询、最少连接等),例如 balance roundrobin。
- 服务器定义:列出后端服务器的 IP 地址和端口,并可以启用健康检查,例如 server srv1 192.0.2.1:80 check。
5. 监听配置(listen)
定义一个监听特定端口的配置,通常用于管理或监控功能。
- 统计页面:启用统计页面,允许通过 Web 浏览器访问 HAProxy 的运行状态和统计信息,例如 stats enable。
- 访问控制:可以设置访问统计页面的用户名和密码,例如 stats auth admin:password。
6. 用户列表(userlist)
定义用户列表,用于访问控制,如统计页面的用户认证。
- 用户认证:指定用户名和密码,例如 user admin insecure-password password。
7. 缓存配置(cache)
配置缓存的大小、最大对象大小、缓存内容的最大生存时间等参数。
- 缓存实例:定义缓存的名称和大小,例如 cache cache 和 max-size 50m。
- 缓存策略:设置缓存内容的最大生存时间和最大对象大小,例如 max-age 3600。
一些参数可以在多个模块中使用,具体参考一下官网的配置文件。
示例配置文件
# 全局配置
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /var/run/haproxy.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# 默认配置
defaults
mode http
log global
option httplog
option dontlognull
retries 3
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
# 前端配置
frontend http_front
bind :80
mode http
default_backend http_back
# 后端配置
backend http_back
mode http
balance roundrobin
server srv1 192.0.2.1:80 check
server srv2 192.0.2.2:80 check
# 监听配置
listen stats
bind :8080
mode http
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth admin:password
# 用户列表
userlist adminlist
user admin insecure-password password
# 缓存配置
cache cache
name cache
max-size 50m
total-max-size 200m
max-cacheable-object-size 10485760
max-age 3600