haproxy 代理/负载均衡器学习二 配置文件介绍
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 haproxygroup 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# 设置源IPstats 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端口,并为端口起一个别名 clearbind :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请求重定向到httpshttp-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 1sserver srv2 192.0.2.2:80 cookie s2 maxconn 100 check inter 1sserver srv3 192.0.2.3:80 cookie s3 maxconn 100 check inter 1sserver 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。
一些参数可以在多个模块中使用,具体参考一下官网的配置文件。
示例配置文件
# 全局配置
globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /var/run/haproxy.sock mode 660 level adminstats timeout 30suser haproxygroup haproxydaemon# 默认配置
defaultsmode httplog globaloption httplogoption dontlognullretries 3timeout connect 5000mstimeout client 50000mstimeout server 50000ms# 前端配置
frontend http_frontbind :80mode httpdefault_backend http_back# 后端配置
backend http_backmode httpbalance roundrobinserver srv1 192.0.2.1:80 checkserver srv2 192.0.2.2:80 check# 监听配置
listen statsbind :8080mode httpstats enablestats uri /statsstats realm Haproxy\ Statisticsstats auth admin:password# 用户列表
userlist adminlistuser admin insecure-password password# 缓存配置
cache cachename cachemax-size 50mtotal-max-size 200mmax-cacheable-object-size 10485760max-age 3600