开启掘金成长之旅!这是我参与「掘金日新计划 · 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 请求。