haproxy 代理/负载均衡器学习二 配置文件介绍

发布于:2025-06-21 ⋅ 阅读:(19) ⋅ 点赞:(0)

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

观察上述配置可以看出,按模块区分可以分为,globaldefaultsbackendcache 、其实还有一个 listenuserlist,下面介绍每个模块都起什么作用。

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

网站公告

今日签到

点亮在社区的每一天
去签到