##使用haproxy+squid构建正向代理服务
#####正向代理的业务场景
- 假设在局域网内存在6台主机,其中只有一台主机可以上外网,那么其余5台主机就需要通过那一台可以上外网的主机上网,即所谓代理(正向代理)。代理服务器启动后,不能上网的主机只需在IE中配置代理服务器即可。IE中的代理服务器设置为 “Internet选项->连接->局域网设置->代理服务器” 中设置代理服务器的IP和代理服务器的端口。
#####问题来了,如何构建一个代理服务呢?
- 如上述假设,在那一台可以出外网的主机上安装代理软件squid,并进行适当配置即可。应该说明的是,代理软件很多,如果那一台能出外网的主机是Windows系统的话,可以选择ccproxy。这里主要是指在Linux环境下的代理,其他代理软件还有nginx,不过貌似大家都用它做反向代理,做正向代理这里还是用squid吧。
#####squid的安装,配置,运行
- 安装
sudo apt-get install squid
- 配置, 打开/etc/squid3/squid.conf文件,注意修改如下的配置项
http_port 3128 #代理服务器的端口
##http_access deny !Safe_ports #注释掉此项
##http_access deny manager #注释掉此项
##http_access deny to_localhost#注释掉此项
##http_access deny all #注释掉此项
#添加下面两项,设置哪些网段可以访问本代理服务器
acl our_networks src 192.168.29.0/24 192.168.17.0/24
http_access allow our_networks
- 重启服务,使代理服务生效
sudo service squid3 restart
#####用haproxy的目的
- haproxy是负载均衡器,它可以将网络请求按一定算法均匀分布到各个代理服务器(这里指正向代理)上,防止压力都集中在某一个节点上,提高整体的服务的负载能力。
#####此处使用haproxy的场景
-
假设有103台主机需要出外网,其中只有2台能直接访问外网,那么我们接着假设这两台主机的IP分别是192.168.29.210, 192.168.29.211,且已经在上面安装好squid代理服务。 还有一台主机我们将其选做负载均衡所在的机器,假设其IP为192.168.29.212。
-
按上述做法,在其余100台主机上可以设置代理(IE “Internet选项->连接->局域网设置->代理服务器” )为192.168.29.212,haproxy负载均衡器会将网络请求按一定算法均匀打到192.168.29.210, 192.168.29.211两台代理服务器上。
#####haproxy的安装,配置,运行
- 安装
sudo apt-get install haproxy
- 配置,配置文件位于/etc/haproxy/haproxy.cfg
global
daemon
maxconn 1024
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend secure
bind *:8888
stats enable
stats uri /admin?admin
stats auth admin:admin
stats admin if TRUE
stats refresh 10s
frontend httpproxy
bind 0.0.0.0:4567
default_backend servers
backend servers
balance leastconn
server squid1 192.168.29.210:3128 maxconn 512 weight 1
server squid2 192.168.29.211:3128 maxconn 512 weight 1
-
配置解释
- 内部的“frontend secure”区块表示的是haproxy的web控制台,可以使用http://192.168.29.212/admin?admin来访问,用户名密码这里设置的都是admin,并设置10秒刷新一次。
- 内部的“frontend httpproxy”区块绑定了4567端口,那么那些(100台主机)就可以在IE中设置代理服务器为192.168.29.212,端口4567。
- 内部的“backend servers”区块使用了“leastconn”算法,指的是最少连接者优先(哪一台代理服务器上请求最少,就把请求往这一台代理服务器上打)。“server squid1 192.168.29.210:3128 maxconn 512 weight 1”和“server squid2 192.168.29.211:3128 maxconn 512 weight 1”指的是两台squid的代理服务器。
-
运行
sudo haproxy -f /etc/haproxy/haproxy.cfg
- 停止运行
sudo killall -9 haproxy
来源:oschina
链接:https://my.oschina.net/u/553781/blog/602443