Haproxy 之 Http 代理的两种方式

listen 与 (frontend + backend) 的配置区别

frontend + backend 的配置示例及运行流程

这是一个 HTTP 代理在所有接口上监听端口 80 的简单配置,请求进入后的运行流程如下:

  1. frontend 监听 80 端口
  2. 请求被 frontend 转发到 backend 的 servers 中
  3. 请求进入运行在 127.0.0.1:8000 的 server1 中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Simple configuration for an HTTP proxy listening on port 80 on all
# interfaces and forwarding requests to a single backend "servers" with a
# single server "server1" listening on 127.0.0.1:8000

global
daemon
maxconn 256

defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

frontend http-in
bind *:80
default_backend servers

backend servers
server server1 127.0.0.1:8000 maxconn 32

listen 的配置示例及运行流程

使用单个 listen 块定义的相同配置。更精简但不那么富有表现力,尤其是在HTTP模式下。

  1. 请求进入 80 端口
  2. 转发入运行在 127.0.0.1:8000 的 server1 中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# The same configuration defined with a single listen block. Shorter but
# less expressive, especially in HTTP mode.

global
daemon
maxconn 256

defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms

listen http-in
bind *:80
server server1 127.0.0.1:8000 maxconn 32

相关命令

1
2
3
4
5
6
7
8
9
10
# 修改配置并重启
sudo vi /etc/haproxy/haproxy.cfg
haproxy -c -f /etc/haproxy/haproxy.cfg
sudo service haproxy restart

# 设置权重
echo 'set weight read_only-back/slave1 0' | sudo socat stdio /run/haproxy/admin.sock

echo 'set server read_only-back/slave1 agent up' | sudo socat stdio /run/haproxy/admin.sock


了解更多

HAProxy 各版本官方文档