注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无明

 
 
 

日志

 
 

利用 squid 反向代理提高网站性能  

2012-04-11 15:12:15|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服务器的内容缓存器

反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。

客户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:
Last-Modified: 告诉反向代理页面什么时间被修改
Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control: 告诉反向代理页面是否应该被缓冲
Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-cache

利用 Squid 反向代理加速网站实例
本实例的域名是 wenjin.cache.ibm.com.cn
,通过DNS的轮询技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户,否则这台 Squid 将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理,这样既减轻后台 WEB 服务器的负载,又提高整个网站的性能和安全性。该系统结构图  如下:

 

2012年04月11日 - 无明 - 无明

 配置的系统环境:

一台 DNS 服务器:操作系统 Freebsd,软件 BIND 9.5,IP 192.168.76.222 ;
三台 Squid 服务器:操作系统 Linux AS 4,软件 Squid 3.0,相应的 IP 如下:

Squid1:192.168.76.223
Squid2:192.168.76.224
Squid3:192.168.76.225

三台 WEB 服务器:操作系统 Linux AS 4,应用软件 Tomcat 5.0+Mysql,相应的 IP 地址如下:
webServer1:210.82.118.195    
webServer2:192.168.76.226
webServer1:192.168.76.227
 
应用软件的安装和配置
配置 DNS 服务器
软件利用 Freebsd 自带的 bind 9.5 。然后针对该系统配置 bind,首先修改 bind 的配置文件 
/etc/namedb/named.conf,在文件中添加

zone "cache.ibm.com.cn"{

type master;
file "master/ cache.ibm.com.cn ";

};

 
再在/etc/namedb/master 目录下添加 cache.ibm.com.cn 文件,该文件的内容如下:
$TTL    3600 
 @       IN      SOA     search. ibm.com.cn. root. ibm.com.cn.  (
                                20080807        ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
        IN      NS      search.ibm.com.cn.
 1       IN      PTR     localhost.ibm.com.cn.
 wenjin  IN      A       192.168.76.223
 wenjin  IN      A       192.168.76.224
 wenjin  IN      A       192.168.76.225

这样当用户请求的时候,DNS 通过轮询机制将 wenjin.cache.ibm.com.cn 的域名解析为 192.168.76.223、
192.168.76.224 和 192.168.76.225 其中之一。
配置完成后,运行 rndc star t 启动 bind 服务。可在 /etc/rc.conf 中设置 named_enable="YES" 使得开机自启动。
用 ps – A |grep named 查看 bind 服务是否起来;
用 nslookup wenjin.cache.ibm.com.cn 测试 bind 服务是否正常运行。


配置 Squid1 服务器
下载 squid-3.0.STABLE8.tar.gz 源码包,将其放在 /home 目录下
解压缩tar – zxvf squid-3.0.STABLE8.tar.gz
设置配置参数:cd squid-3.0.STABLE10
./configure – prefix=/usr/local/squid
make&make install
安装完以后会在 /usr/local 目录下看见 squid 目录。
编辑 squid.conf 文件,vi /usr/local/squid/etc/squid.conf

cache_effective_user squid
 cache_effective_group squid
 ######### 设定 squid 的主机名 , 如无此项 squid 将无法启动
 visible_hostname squid1.nlc.gov.cn
 ############# 配置 squid 为加速模式 #################
 http_port 80 accel vhost vport
 icp_port 3130
 ##### 配置 squid2、squid3 为其邻居,当 squid1 在其缓存中没有找到请求的资源时,
          通过 ICP 查询去其邻居中取得缓存
 cache_peer squid2.ibm.com.cn sibling 80 3130
 cache_peer squid3.ibm.com.cn sibling 80 3130
 ##### squid1 的三个父节点,originserver 参数指明是源服务器,
 round-robin  参数指明 squid 通过轮询方式将请求分发到其中一台父节点;
 squid 同时会对这些父节点的健康状态进行检查,如果父节点 down 了,
那么 squid 会从剩余的 origin 服务器中抓取数据
 cache_peer 210.82.118.195 parent 8080 0 no-query originserver round-robin \
                                              name=webServer1
 cache_peer 192.168.76.226 parent 8080 0 no-query originserver round-robin \
                                              name=webServer2
 cache_peer 192.168.76.227 parent 8080 0 no-query originserver round-robin \
                                            name=webServer3
 #### 将 wenjin.cache.ibm.com.cn 域的请求通过 RR 轮询方式转发到三个父节点中的一个
 cache_peer_domain webServer1 webServer2 webServer3 wenjin.cache.ibm.com.cn
 ##### 下面是一些访问控制、日志和缓存目录的设置
 acl localnet src 192.168.76.223 192.168.76.224 192.168.76.225
 acl all src 0.0.0.0/0.0.0.0
 http_access allow all
 icp_access allow localnet
 cache_log /usr/local/squid/var/logs/cache.log
 access_log /usr/local/squid/var/logs/access.log squid
 cache_dir ufs /usr/local/squid/var/cache/ 1000 16 256
 ####### 对 squid 的一些优化 ###############
 maximum_object_size 10240 KB  ### 能缓存的最大对象为 10M
 maximum_object_size_in_memory 512 KB ### 内存中缓存的最大对象 512K
 cache_mem 256 MB  ###squid 用于缓存的内存量


保存后 :wq 退出。在 /etc/hosts 文件中添加

192.168.76.223  squid1.ibm.com.cn  
192.168.76.224  squid2.ibm.com.cn  
192.168.76.225  squid3.ibm.com.cn 





检查 squid 配置文件正确与否:
/usr/local/squid/bin/squid – k parse
生成缓存目录
/usr/local/squid/bin/squid – z
启动
squid:/usr/local/squid/bin/squid
配置 squid2 和 squid3 服务器
squid2 和 squid3 服务器的配置方法和配置参数和 squid1 一样,配置完成后,分别启动这两个服务器上的 squid 服务。
在 squid 的日志文件 cache.log 中,出现如下日志信息则说明三台 squid 之间成功配置为 sibling,且配置了三个父代理。

2008/11/17 10:08:47| Configuring Sibling squid1.ibm.com.cn/80/3130
2008/11/17 10:08:47| Configuring Sibling squid3.ibm.com.cn/80/3130   
2008/11/17 10:08:47| Configuring Parent 210.82.118.195/8080/0   
2008/11/17 10:08:47| Configuring Parent 192.168.76.226/8080/0   
2008/11/17 10:08:47| Configuring Parent 192.168.76.227/8080/0   
2008/11/17 10:08:47| Ready to serve requests.


测试
测试之前,保证 DNS 服务、三台 squid 服务和三台 web 服务都正常起来。
在客户端输入http://wenjin.cache.nlc.gov.cn/,则正确的显示该网页。
服务器端的响应对客户端是透明的,客户端不知道请求是由哪台 WEB 服务器处理的;
而且其中某台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。

  评论这张
 
阅读(280)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018