HAProxy 配置

354 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

HAProxy

HAProxy 反向代理和负载均衡器的作用

HAProxy 基本配置

配置文件结构

HAProxy 的配置文件一般名为 haproxy.cfg,默认位于 /etc/haproxy 目录下, HAProxy 的配置文件有多个 Section 组成,总共有4种类型的 Section,它们分别是:

  • global - 进程级别的参数,比如设定日志路径和用户组
  • defaults - HAProxy 作为代理默认的一些参数,比如连接超时时间
  • frontend - 定义如何接收和转发请求
  • backend - 定义后端处理请求的服务器列表

ACL(Access Control Lists)

作为一个反向代理,我们需要根据请求内容,比如 Host 或者 Http Header 动态的选择请求转发的后端服务器,而 ACL 则是实现该需求的手段。
ACL 一般使用形式如下:
acl is_rethinkphp hdr(Host) -i rethinkphp.com
整条 acl 的含义是判断一个请求的 Host 是否是 rethinkphp.com。

  • is_rethinkphp :acl名称
  • hdr(Host) 表示从 Header 中提取 Host 用于比较
  • -i 表示忽略大小写

这条 ACL 规则可以写成这样:
acl is_rethinkphp hdr(Host),lower rethinkphp.com
其中 lower 是一个 converter,可以理解为一个函数,把 Host 转成小写再用于比较。

监听网络请求

有了上面的基础,我们就可以定义一个 frontend 来监听网络请求了:

frontend http_in
    bind *:80
    mode http # 代理服务器模式
    timeout http-keep-alive 1000
    acl is_rethinkphp hdr(Host) -i rethinkphp.com
    use_backend **bk_rethinkphp** if is_rethinkphp
这里我们监听了所有 80 端口的网络请求,并设置代理服务器模式为 http,然后判断如果请求的 Host 是 rethinkphp.com,就使用 bk_rethinkphp 这个 backend,表示匹配的请求都会转发到 bk_rethinkphp 所定义的后端服务器。

定义后端服务

网络监听和转发规则都设定好了,我们直接看后端 backend 的定义吧:

backend **bk_rethinkphp**
    mode http
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option httpchk GET /
    server server01  172.16.1.101:7789 check
    server server02  172.16.1.102:7789 check 
这里我们是 backend 关键字定义了名为 bk_rethinkphp 的后端服务器组,里面包含了 server01 和 server02 两台服务器,并通过 check 参数开启了健康检查,到这里一个 HAProxy 基本配置基本完成了,server01 和 server02 会接收来自 rethinkphp.com 的 http 请求。

参考资料