使用haproxy 搭建正向代理

haproxy是负载均衡器,它可以将网络请求按一定算法均匀分布到各个代理服务器(这里指正向代理)上,防止压力都集中在某一个节点上,提高整体的服务的负载能力。

一下给出一个简短的haproxy搭建正向代理的最小化实例

检测脚本

脚本check.sh 为检测代理可用性的脚本,haproxy 会定期调用这个脚本,传入代理的一些配置值,组装成curl 命令发请求,并且检查返回的响应码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
listen_address=$1
listen_port=$2
server_address=$3
server_port=$4
status=$(/usr/bin/curl -I -o /dev/null -skL -x socks5h://${server_address}:${server_port} --connect-timeout 3 --retry 3 -w %{http_code} "https://www.google.com/generate_204")
case "$status" in
204|\
200)
status=200
;;
esac
return_code=1
if [ "$status" = "200" ]; then
return_code=0
fi
exit ${return_code}

haproxy 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
global
log /dev/log local0
log /dev/log local1 notice
stats timeout 30s
daemon
external-check # 启用外部检查支持
insecure-fork-wanted # 允许进行不安全的进程创建

defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000

frontend http-in
bind *:1181
mode http
option httplog
option forwardfor
default_backend http-proxy-backend

backend http-proxy-backend
mode http
balance roundrobin
option external-check
external-check path "/bin:/usr/bin:/sbin:/usr/sbin"
external-check command "check.sh"
server server_1711 192.168.1.112:1711 weight 5 check inter 60s rise 1 fall 3
server server_1712 192.168.1.112:1712 weight 5 check inter 60s rise 1 fall 3
server server_1714 192.168.1.112:1714 weight 5 check inter 60s rise 1 fall 3
server server_7890 127.0.0.1:7890 weight 5 check inter 60s rise 1 fall 3
server server_10888 127.0.0.1:10888 weight 5 check inter 60s rise 1 fall 3

listen console
bind 0.0.0.0:1188
mode http
stats refresh 30s
stats uri /

主要配置是这一段话 server server_1711 192.168.1.112:1711 weight 5 check inter 60s rise 1 fall 3

  • server server_1711: 这定义了一个名为server_1711的后端服务器。
  • 192.168.1.112:1711: 这是该后端服务器的IP地址和端口号。也就是说,负载均衡器将会把流量转发到这个地址和端口。
  • weight 5: 这表示该服务器的权重为5。在负载均衡决策中,权重更高的服务器会接收到更多的流量。例如,如果另一个服务器的权重是2,那么server_1711将会接收到比那个服务器更多的请求。
  • check: 这表示负载均衡器应该定期检查这个服务器的健康状态。如果服务器不健康,负载均衡器就不会向其发送流量。
  • inter 60s: 这表示负载均衡器应该每60秒检查一次服务器的健康状态。
  • rise 1: 这表示服务器需要从失败状态转变为成功状态所需的连续成功的健康检查次数。在这个例子中,只需要1次成功的健康检查就可以认为服务器已经恢复。
  • fall 3: 这表示服务器在被认为是失败之前可以经历的连续失败的健康检查次数。在这个例子中,如果服务器连续3次健康检查都失败,那么负载均衡器就会认为这个服务器是不健康的,并且停止向其发送流量。

并且 haproxy会在1188 端口上启动一个后台监控服务器,访问这个地址可以查看代理的健康状况。


使用haproxy 搭建正向代理
https://kingjem.github.io/2024/11/14/haproxy使用/
作者
Ruhai
发布于
2024年11月14日
许可协议