haproxy笔记

Haproxy2.1版本开始支持UDP协议,配置文件位于/etc/haproxy/haproxy.cfg。为了确保配置无误,可以使用命令`haproxy-fhaproxy.cfg-c`进行检查。文章详细介绍了Haproxy的常用配置选项及命令行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Haproxy2.1支持UDP

https://blog.51cto.com/johnnyfang/5301681
image.png
image.png

Haproxy常用配置

配置文件在/etc/haproxy/haproxy.cfg

HAProxy配置文件可以分五部分:

参数解释
global:全局配置参数段,主要用来控制Haproxy启动前的进程及系统相关设置
defaults:配置一些默认参数,如果frontend,backend,listen等段未设置则使用defaults段配置。
listen:监听
frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理。
backend:定义后端服务器集群,以及对后端服务器的一些老权重、队列、连接数等选项的设置。

HAProxy配置文件示例

#---------------------------------------------------------------------
# 全局设置
#---------------------------------------------------------------------
global
    # 为了让这些消息记录到 /var/log/haproxy.log,你需要:
    #
    # 1) 配置 syslog 以接受网络日志事件。这可以通过在 /etc/sysconfig/syslog 中
    #    添加 '-r' 选项来完成
    #
    # 2) 配置 local2 事件将日志记录到 /var/log/haproxy.log 文件。可以在
    #    /etc/sysconfig/syslog 中添加如下行:
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2  # 配置日志输出到本地 syslog 的 local2 设施
    # log         127.0.0.1 local0  # 日志输出配置,所有日志都记录在本机,通过local0输出

    chroot      /var/lib/haproxy  # 更改根目录,以提高安全性
    pidfile     /var/run/haproxy.pid  # 指定 PID 文件位置
    maxconn     4000  # 设置最大连接数为 4000
    user        haproxy  # 运行进程的用户
    group       haproxy  # 运行进程的用户组
    # uid         99       # 所属运行的用户uid
    # gid         99       # 所属运行的用户组
    daemon               # 以守护进程方式运行
    nbproc 1                 #启动1个haproxy实例
    # 开启统计信息的 Unix 套接字
    stats socket /var/lib/haproxy/stats
    # debug   # 启用调试模式,输出详细日志信息
    # quiet   # 启用静默模式,减少日志输出

#---------------------------------------------------------------------
# 默认设置,所有的 'listen' 和 'backend' 部分如果没有特别指定会使用这些设置
#---------------------------------------------------------------------
defaults
    # 默认的模式:tcp|http|health
    mode    http  # 设置默认模式为 HTTP
    # log                     global  # 使用全局日志设置
    log     127.0.0.1       local3      #日志文件的输出定向
    option  httplog  # 日志类别,采用http日志格式
    option  dontlognull  # 不记录空连接的日志
    option  http-server-close  # 每次请求后关闭 HTTP 连接
    option  redispatch  # 当serverid对应的服务器挂掉后,强制定向到其他健康服务器
    option  retries 3    # 三次连接失败则认证服务器不可用
    option  forwardfor   # 将客户端真实ip加到HTTP Header中供后端服务器读取
    option  httpclose    # 每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只>能模拟这种模式的实现
    option  abortonclose # 当服务器负载很高时,自动结束掉当前队列中处理比较久的链接
    timeout http-request    10s  # HTTP 请求超时时间为 10 秒
    timeout queue           1m  # 队列超时时间为 1 分钟
    timeout connect         10s  # 连接超时时间为 10 秒
    timeout client          1m  # 客户端超时时间为 1 分钟
    timeout server          1m  # 服务器超时时间为 1 分钟
    timeout http-keep-alive 10s  # HTTP 保持连接的超时时间为 10 秒
    timeout check           10s  # 健康检查超时时间为 10 秒
    maxconn                 3000  # 每个进程的最大连接数为 3000

    # stats enable               # 全局启用统计功能
    # stats uri /haproxy-stats   # 设置HAProxy监控页面的访问地址为'/haproxy-stats'
    # stats auth test:test123    # 设置监控页面的用户和密码
    # stats hide-version         # 隐藏统计页面上的HAProxy版本信息

#---------------------------------------------------------------------
# 统计页面设置
#---------------------------------------------------------------------
listen stats
    mode http                                                        # 设置后端为HTTP模式
    balance source                                                   # 使用源IP地址进行负载均衡
    bind *:8080  # 监听所有接口的 8080 端口
    mode http     # 使用 HTTP 模式
    stats enable  # 启用统计页面
    stats uri /haproxy?stats  # 统计页面的 URI
    stats realm Haproxy\ Statistics  # 统计页面的认证域
    stats auth admin:admin  # 统计页面的访问认证(用户名:密码)
    option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.taobao.net  # 定义HTTP健康检查请求方法和路径
    server denlai1 10.5.5.114:80 check inter 1500 rise 3 fall 3      # 定义后端服务器denlai1,启用健康检查,每隔1500毫秒检查一次,连续3次成功认为正常,连续3次失败认为故障
    server denlai2 10.6.6.104:80 check inter 1500 rise 3 fall 3      # 定义后端服务器denlai2,启用健康检查,每隔1500毫秒检查一次,连续3次成功认为正常,连续3次失败认为故障

#---------------------------------------------------------------------
# 前端设置
#---------------------------------------------------------------------
frontend http-in           
    bind    *:81        # 监听所有接口的 81 端口
    mode    http        # 使用 HTTP 模式
    option  httplog     # 日志类别,采用http日志格式
    log     global      # 使用全局日志设置
    # default_backend servers  # 默认的后端服务器池
    default_backend htmpool   # 静态服务器池

#---------------------------------------------------------------------
# 后端设置
#---------------------------------------------------------------------
backend htmpool

    balance roundrobin  # 使用轮询算法进行负载均衡
    server server1 192.168.1.1:80 check  # 定义后端服务器1,并进行健康检查
    server server2 192.168.1.2:80 check  # 定义后端服务器2,并进行健康检查


    # balance leastconn         # 负载均衡算法
    # option  httpchk HEAD /index.html HTTP/1.0    #健康检查
    # server  web1 192.168.2.10:80 cookie 1 weight 5 check inter 2000 rise 2 fall 3
    # server  web2 192.168.2.11:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
    # web1/web2:自定义服务器别名
    # 192.168.2.10:80:服务器IP:Port
    # cookie 1/2:表示serverid
    # weight: 服务器权重,数字越大分配到的请求数越高
    # check: 接受定时健康检查 
    # inter 2000: 检查频率
    # rise 2: 两次检测正确认为服务器可用
    # fall 3: 三次失败认为服务器不可用

#---------------------------------------------------------------------
# main frontend which proxys to the backends
# 主前端,负责将请求代理到后端
#---------------------------------------------------------------------
frontend  main *:5000
   acl url_static       path_beg       -i /static /images /javascript /stylesheets  # 定义名为url_static的访问控制列表,匹配以/static、/images、/javascript或/stylesheets开头的路径
   acl url_static       path_end       -i .jpg .gif .png .css .js                   # 定义名为url_static的访问控制列表,匹配以.jpg、.gif、.png、.css或.js结尾的路径

   use_backend static          if url_static    # 如果请求路径匹配url_static规则,则使用static后端
   default_backend             app              # 默认使用app后端

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
# 静态资源后端,用于提供图片、样式表等静态资源
#---------------------------------------------------------------------
backend static
   balance     roundrobin                    # 使用轮询算法进行负载均衡
   server      static 127.0.0.1:4331 check   # 定义名为static的后端服务器,IP为127.0.0.1,端口为4331,启用健康检查

#---------------------------------------------------------------------
# round robin balancing between the various backends
# 各种后端之间的轮询负载均衡
#---------------------------------------------------------------------
backend app
   balance     roundrobin                    # 使用轮询算法进行负载均衡
   server  app1 127.0.0.1:5001 check         # 定义名为app1的后端服务器,IP为127.0.0.1,端口为5001,启用健康检查
   server  app2 127.0.

 
# 定义一个名为MyRdp的监听器
listen MyRdp
    # 设定为TCP模式,用于处理纯TCP流量
    mode tcp
    # 绑定监听地址和端口,监听所有IP地址上的3389端口(远程桌面协议端口)
    bind *:3389
    # 定义后端服务器myRdp1,IP地址为192.168.1.100,端口3389,最大连接数为32
    server myRdp1 192.168.1.100:3389 maxconn 32
    # 启用TCP日志记录,以便记录详细的连接日志
    option tcplog
 
# 定义一个名为web_vip的监听器,并绑定到0.0.0.0:80上
listen web_vip 0.0.0.0:80
    # 设定为HTTP模式,用于处理HTTP请求
    mode http
    # 启用HTTP日志记录,以便记录详细的HTTP请求日志
    option httplog
    # 启用X-Forwarded-For头部,用于记录客户端的真实IP地址,排除本地环回地址(127.0.0.0/8)
    option forwardfor  except 127.0.0.0/8
    # 启用统计页面,访问路径为/haproxy-stats
    stats  uri         /haproxy-stats
 
# 定义一个监听实例,名称为w.gdu.me,绑定到0.0.0.0:80端口
listen w.gdu.me 0.0.0.0:80
    option  httpchk GET /index.html   # 定义HTTP健康检查,发送GET请求到/index.html
    server  s1 192.168.2.10:80 weight 3 check  # 定义名为s1的后端服务器,IP为192.168.2.10,端口为80,权重为3,启用健康检查
    server  s3 192.168.2.11:80 weight 3 check  # 定义名为s3的后端服务器,IP为192.168.2.11,端口为80,权重为3,启用健康检查

# Haproxy统计页面
# --------------------------------------------------------------------------------------------
listen haproxy_stats
    bind 0.0.0.0:1080  # 侦听在0.0.0.0:1080端口
    mode http  # 设置监听实例为HTTP模式
    log  127.0.0.1 local 0 err  # 设置日志记录到127.0.0.1的本地设备,记录错误日志
    stats refresh 30s  # 统计页面每30秒刷新一次
    stats uri /haproxy-stats  # 统计页面的访问URI
    stats realm Haproxy\ Statistics  # 统计页面的身份验证领域
    stats auth admin:admin  # 设置访问统计页面的用户名和密码为admin:admin
    stats auth test:test  # 另一个访问统计页面的用户名和密码为test:test
    stats hide-version  # 隐藏统计页面上的HAProxy版本信息
    stats admin if TRUE  # 允许在统计页面上手动启用/禁用后端服务器

# 网站检测监听配置
# --------------------------------------------------------------------------------------------
listen site_status
    bind 0.0.0.0:1081  # 侦听在0.0.0.0:1081端口
    mode http  # 设置监听实例为HTTP模式
    log  127.0.0.1 local0 err  # 设置日志记录到127.0.0.1的本地设备,记录错误日志

    # 网站健康检查URI,用来检测HAProxy管理的网站是否正常,正常返回200、异常返回500
    monitor-uri /site_status

    # 定义网站down时的策略
    acl site_dead nbsrv(denali_server) lt 1  # 当denali_server中有效服务器数少于1时,返回true
    acl site_dead nbsrv(tm_server) lt 1  # 当tm_server中有效服务器数少于1时,返回true
    acl site_dead nbsrv(mms_server) lt 1  # 当mms_server中有效服务器数少于1时,返回true

    # 当满足策略的时候返回HTTP 500,否则返回HTTP 200
    monitor fail if site_dead

    # 声明一个监测请求的来源网络
    monitor-net 192.168.0.252/31

# HTTPS的配置方法
# --------------------------------------------------------------------------------------------
listen login_https_server
    bind 0.0.0.0:443   # 绑定HTTPS的443端口
    mode tcp           # HTTPS必须使用TCP模式
    log global         # 使用全局的日志配置
    balance roundrobin  # 负载均衡方式为轮询
    option httpchk GET /member/login.jhtml HTTP/1.1\r\nHost:login.daily.taobao.net  # 定义HTTP健康检查,发送GET请求到/member/login.jhtml,指定Host头为login.daily.taobao.net
    server vm94f.sqa 192.168.212.94:443 check port 80 inter 6000 rise 3 fall 3  # 定义后端服务器vm94f.sqa,IP为192.168.212.94,端口为443,启用健康检查
    server v215120.sqa 192.168.215.120:443 check port 80 inter 6000 rise 3 fall 3  # 定义后端服务器v215120.sqa,IP为192.168.215.120,端口为443,启用健康检查

# frontend配置
# --------------------------------------------------------------------------------------------
frontend http_80_in
    bind 0.0.0.0:80   # 监听端口
    mode http         # 设置前端为HTTP模式
    log global        # 使用全局的日志配置
    option httplog    # 启用HTTP日志记录
    option httpclose  # 每次请求完毕后主动关闭HTTP通道,HAProxy不支持keep-alive模式
    option forwardfor # 如果后端服务器需要获得客户端的真实IP,需要配置此参数,可以从HTTP头中获得客户端IP

    # HAProxy的日志记录内容配置
    capture request header Host len 40              # 捕获请求中的主机名,长度为40
    capture request header Content-Length len 10    # 捕获请求中的内容长度,长度为10
    capture request header Referer len 200          # 捕获请求中的引用地址,长度为200
    capture response header Server len 40           # 捕获响应中的服务器名,长度为40
    capture response header Content-Length len 10   # 捕获响应中的内容长度,长度为10(可配合option logasap使用)
    capture response header Cache-Control len 8     # 捕获响应中的缓存控制,长度为8
    capture response header Location len 20         # 捕获响应中的重定向地址,长度为20

    # ACL策略规则定义
    #-------------------------------------------------
    acl denali_policy hdr_reg(host) -i ^(www.gemini.taobao.net|my.gemini.taobao.net|auction1.gemini.taobao.net)$  # 如果请求的域名满足正则表达式返回true(-i:忽略大小写)
    acl tm_policy hdr_dom(host) -i trade.gemini.taobao.net  # 如果请求域名满足trade.gemini.taobao.net返回true
    acl invalid_req url_sub -i sip_apiname=  # 在请求URL中包含sip_apiname=,此控制策略返回true,否则为false
    acl timetask_req url_dir -i timetask  # 在请求URL中存在timetask作为部分地址路径,此控制策略返回true,否则返回false
    acl missing_cl hdr_cnt(Content-length) eq 0  # 当请求的header中Content-Length等于0时返回true

    # ACL策略匹配响应
    #-------------------------------------------------
    block if missing_cl  # 当请求中header中Content-Length等于0,阻止请求返回403
    block if !invalid_req || timetask_req  # 如果不满足策略invalid_req,或者满足策略timetask_req,阻止请求
    use_backend denali_server if denali_policy  # 当满足denali_policy的策略时,使用denali_server的backend
    use_backend tm_server if tm_policy  # 当满足tm_policy的策略时,使用tm_server的backend

    reqisetbe ^Host:\ img           dynamic  # 定义根据关键字选择backend
    reqisetbe ^[^\ ]*\ /(img|css)/  dynamic  # 定义根据关键字选择backend
    reqisetbe ^[^\ ]*\ /admin/stats stats  # 定义根据关键字选择backend

    default_backend mms_server  # 以上都不满足的时候,使用默认的mms_server的backend

    # HAProxy错误页面设置
    errorfile 400 /home/admin/haproxy/errorfiles/400.http
    errorfile 403 /home/admin/haproxy/errorfiles/403.http
    errorfile 408 /home/admin/haproxy/errorfiles/408.http
    errorfile 500 /home/admin/haproxy/errorfiles/500.http
    errorfile 502 /home/admin/haproxy/errorfiles/502.http
    errorfile 503 /home/admin/haproxy/errorfiles/503.http
    errorfile 504 /home/admin/haproxy/errorfiles/504.http

# backend的设置
# --------------------------------------------------------------------------------------------
backend mms_server
    mode http           # 设置后端为HTTP模式
    balance roundrobin  # 负载均衡方式为轮询
    cookie SERVERID     # 允许插入ServerID到Cookie中
     
    option httpchk GET /member/login.jhtml HTTP/1.1\r\nHost:member1.gemini.taobao.net  # 心跳检测的URL
     
    server mms1 10.1.5.134:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1  # 定义后端服务器mms1,启用健康检查,心跳频率为1500毫秒,权重为1
    server mms2 10.1.6.118:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2  # 定义后端服务器mms2,启用健康检查,心跳频率为1500毫秒,权重为2

backend denali_server
    mode http
    balance source     # 负载均衡方式为源地址哈希
    option allbackups  # 设置了backup的时候,默认第一个backup会优先,设置option allbackups后所有备份服务器权重一样
    option httpchk GET /mytaobao/home/my_taobao.jhtml HTTP/1.1\r\nHost:my.gemini.taobao.net  # 心跳检测URL设置
    server denlai1 10.1.5.114:80 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3  # 定义后端服务器denlai1,最小连接数4,最大连接数12,启用健康检查
    server denlai2 10.1.6.104:80 minconn 10 maxconn 20 check inter 1500 rise 3 fall 3  # 定义后端服务器denlai2,最小连接数10,最大连接数20,启用健康检查
    server dnali-back1 10.1.7.114:80 check backup inter 1500 rise 3 fall 3  # 定义备份服务器dnali-back1,启用健康检查
    server dnali-back2 10.1.7.114:80 check backup inter 1500 rise 3 fall 3  # 定义备份服务器dnali-back2,启用健康检查

backend tm_server
    mode http
    balance leastconn   # 负载均衡方式为最少连接
    option httpchk GET /trade/itemlist/prepayCard.htm HTTP/1.1\r\nHost:trade.gemini.taobao.net  # 心跳检测URL设置
    server tm1 10.1.5.115:80 check inter 1500 rise 3 fall 3  # 定义后端服务器tm1,启用健康检查
    server tm2 10.1.6.105:80 check inter 1500 rise 3 fall 3  # 定义后端服务器tm2,启用健康检查

# reqisetbe自定义关键字匹配backend部分
backend dynamic
    mode http
    balance source
    option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.taobao.net  # 心跳检测URL设置
    server denlai1 10.3.5.114:80 check inter 1500 rise 3 fall 3  # 定义后端服务器denlai1,启用健康检查
    server denlai2 10.4.6.104:80 check inter 1500 rise 3 fall 3  # 定义后端服务器denlai2,启用健康检查

HAProxy常用命令

# 检查配置文件是否有误
haproxy -f haproxy.cfg -c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值