squid对WEB服务器的反向代理,实现静态文件的加速

squid对WEB服务器的反向代理,实现静态文件的加速

1.架构设计: 
WEB服务器 IP:192.168.4.6 [以下简称M6]
squid反向代理服务器 IP:192.168.4.5 [以下简称M5]
客户端 IP:192.168.4.250 [以下简称M250]

1、M6中搭建一个简单的web程序

yum install httpd* -y
echo "内网web" > /var/www/html/index.html
/etc/init.d/httpd restart

2、在M4上安装squid,并进行配置

yum install squid -y
vi /etc/squid/squid.conf

修改一下:

62 http_port 80 accel vhost vport
 cache_peer 192.168.4.6 parent 80 0 no-query originserver name=web
cache_peer_domain web web.cluster.com
cache_peer_domain web 192.168.4.6 
59 http_access allow all
68 cache_dir ufs /var/spool/squid 256 16 256 
cache_peer_domain web web.cluster.com
cache_peer_domain web 192.168.4.6

解释 accel 反向代理加速模式 vhost 支持域名或主机名来表示代理节点 vport 支持IP和端口来表示代理节点 192.168.4.6 内网web服务器的IP parent 上下关系,非平级关系 80 代理内部web服务器的80端口 0 没有使用icp,表示就一台squid服务器 no-query 不去查询邻居,与上面的0结合使用 originserver 表示源实际服务器 name=web 定义一个名字,让后面的参数引用
cache_peer_domain web web.cluster.com 对web.cluster.com的请求会给web这台服务器(也就是上面定义的192.168.4.6);如果有多台web的话,可以多台web绑定同一个域名,还可以实现RR轮循调度
cache_peer_domain web 192.168.4.6 光写上面一条,客户端只能通过web.cluster.com访问,再加上这条,客户端就可以使用192.168.4.6 来访

# iptables -t nat -F

重启服务,注意不要与apache的80端口冲突

客户端测试:
所以这里客户端的DNS解析web.cluster.com应该得到192.168.4.5的结果,所以这里不做DNS的话,就直接在/etc/hosts里写上
192.168.4.5  web.cluster.com
再使用http://web.cluster.com
可以使用curl -I http://web.cluster.com去查有没有命中缓存
打开ip_forward转发
# vi /etc/sysctl.conf
    net.ipv4.ip_forward = 1    #0为关闭,1为开启路由
# sysctl -p     # 使之生效
关闭SELinux【略】
关闭防火墙
如果需要开启防火墙
客户端验证:

[[email protected] ~]# curl -I http://web.cluster.com/
HTTP/1.0 200 OK
Date: Wed, 10 Aug 2016 08:06:51 GMT
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Tue, 09 Aug 2016 08:17:30 GMT
ETag: "a27d1-a-5399f29fa2540"
Accept-Ranges: bytes
Content-Length: 10
Content-Type: text/html; charset=UTF-8
Age: 806
X-Cache: HIT from localhost.localdomain
X-Cache-Lookup: HIT from localhost.localdomain:80
Via: 1.0 localhost.localdomain (squid/3.1.10)
Connection: keep-alive

问题一:
squid如何代理多个web?


http_port 80 accel vhost vport

cache_peer 192.168.1.128 parent 80 0 no-query originserver round-robin name=web1
cache_peer 192.168.1.129 parent 80 0 no-query originserver round-robin name=web2
cache_peer 192.168.1.130 parent 80 0 no-query originserver round-robin name=web3
cache_peer 192.168.1.131 parent 80 0 no-query originserver round-robin name=web4

cache_peer_domain web1 web2 web.cluster.com
cache_peer_domain web3 web4 web.abc.com


问题二:
如何配置下面的squid集群?

参考
http://www.ibm.com/developerworks/cn/linux/l-cn-squid


   172.16.2.X
   client 

   www.abc.com
      LVS或DNS轮循或智能DNS
   


    172.16.2.9    172.16.2.10 
  squid1  squid2
    192.168.1.1    192.168.1.2


  web1  web2
    192.168.1.128   192.168.1.129

配置过程
第一步:
两个web上安装httpd,并建立两个不同主面方便测试(注意这里所有的机器的时间一定要同步,特别是web1和web2;如果web1和web2的时间隔得太久,可能会造成客户端访问时,不先访问缓存而是访问后台web,也就是缓存失效了)


过程省略

第二步:
安装并配置squid1
# yum install squid -y
# vim /etc/squid/squid.conf
59 http_access allow all
68 cache_dir ufs /var/spool/squid 256 16 256
62 http_port 80 accel vhost vport

icp_port 3130
icp_access allow all
cache_peer 192.168.1.2 sibling 80 3130
cache_peer 192.168.1.128 parent 80 0 no-query originserver round-robin name=web1
cache_peer 192.168.1.129 parent 80 0 no-query originserver round-robin name=web2
cache_peer_domain web1 web2 www.abc.com

# /etc/init.d/squid start

第三步:
安装并配置squid2
把squid1的配置文件拷过来,只需要修改一个地方(就是sibling的IP)
# yum install squid -y
# vim /etc/squid/squid.conf
cache_peer 192.168.1.1 sibling 80 3130  --把这个IP换成对方的IP

然后也启动服务
# /etc/init.d/squid start


第四步:
在客户端测试
vim /etc/hosts  --绑定IP地址与域名来模拟DNS(注意这里不能实现DNS轮循,所以手动绑定其中指定解析为squid1或squid2)
172.16.2.9 www.abc.com

vim /etc/hosts
172.16.2.10 www.abc.com

未经允许不得转载:好玩吧 » squid对WEB服务器的反向代理,实现静态文件的加速