天天看点

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

李明慧, 软件工程师, IBM

李明慧 ,在 IBM

中国软件开发中心 BI 团队工作从事 InfoSphere Warehouse Administration Console 的功能测试工作。曾在

DeveloperWorks 发表《将 DB2 DWE 9.1.X 迁移到 DB2 Warehouse 9.5》、《 InfoSphere Warehouse

SQL 仓储命令行接口》以及《Linux下利用 squid 反向代理提高网站性能》等文章。

简介: 本文在介绍 squid

反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid

反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性。

<b>发布日期:</b> 2009 年 4 月 02 日

<b>级别:</b> 初级

访问情况

: 25763 次浏览

评论: 1 (查看 | 添加评论 -

登录)

平均分

(63个评分)

为本文评分

本文在介绍 squid

现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB

服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。

反向代理的概念

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

务器的内容缓存器。其系统结构如图 1

<b>图 1. 系统结构</b>

反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB

服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL

请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB

服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。

回页首

Squid 反向代理的实现原理

目前有许多反向代理软件,比较有名的有 Nginx 和 Squid 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru

站点开发的,是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

<code>Squid</code><code></code>是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持<code>HTTP</code>,HTTPS,FTP 等多种协议,是现在

Unix 系统上使用、最多功能也最完整的一套软体。下面将重点介绍 Squid 反向代理的实现原理和在提高网站性能方面的应用。

<code>Squid</code>反向代理服务器位于本地 WEB 服务器和 Internet 之间 , 组织架构如图 2:

<b>图 2. 组织架构</b>

客户端请求访问 WEB 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL

请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 WEB

服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP

之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:

Last-Modified: 告诉反向代理页面什么时间被修改

Expires: 告诉反向代理页面什么时间应该从缓冲区中删除

Cache-Control: 告诉反向代理页面是否应该被缓冲

Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-c<code>ache</code><code></code>

利用 Squid 反向代理加速网站实例

本实例的域名是

wenjin.cache.<code>ibm.com.cn</code>,通过<code>DNS</code>的轮询技术,将客户端的请求分发给其中一台

Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请求的资源直接返回给用户,否则这台 Squid

将没有缓存的请求根据配置的规则发送给邻居 Squid 和后台的 WEB 服务器处理,这样既减轻后台 WEB

服务器的负载,又提高整个网站的性能和安全性。该系统结构图 3 如下:

<b>图 3.</b>

系统结构

配置的系统环境:

一台 DNS 服务器:操作系统 Freebsd,软件 BIND 9.5,IP 192.168.76.222 ;

三台 Squid 服务器:操作系统 Linux AS 4,软件 Squid 3.0,相应的 IP 如下:

三台 WEB 服务器:操作系统 Linux AS 4,应用软件 Tomcat 5.0+Mysql,相应的 IP 地址如下:

应用软件的安装和配置

配置 DNS 服务器

软件利用 Freebsd 自带的 bind 9.5 。然后针对该系统配置 bind,首先修改 bind 的配置文件

/etc/namedb/named.conf,在文件中添加

再在 /etc/namedb/master 目录下添加 cache.ibm.com.cn 文件,该文件的内容如下:

这样当用户请求的时候,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 目录下

解压缩<code>tar – zxvf squid-3.0.STABLE8.tar.gz</code>

设置配置参数:<code>cd squid-3.0.STABLE10</code>

squid 安装在 /usr/local 目录下

编译安装:<code>make&amp;make install</code>安装完以后会在 /usr/local 目录下看见 squid 目录。

配置 squid 配置文件

编辑 squid.conf 文件,<code>vi /usr/local/squid/etc/squid.conf</code>

保存后 :wq 退出。

在 /etc/hosts 文件中添加

保存后 : wq 退出。

检查 squid 配置文件正确与否:<code>/usr/local/squid/bin/squid – k parse</code>

生成缓存目录<code>/usr/local/squid/bin/squid – z</code>

启动<code>squid:/usr/local/squid/bin/squid</code>

配置 squid2 和 squid3 服务器

squid2 和 squid3 服务器的配置方法和配置参数和 squid1 一样,配置完成后,分别启动这两个服务器上的 squid 服务。

在 squid 的日志文件 cache.log 中,出现如下日志信息则说明三台 squid 之间成功配置为 sibling,且配置了三个父代理。

测试

测试之前,保证 DNS 服务、三台 squid 服务和三台 web 服务都正常起来。在客户端输入http://wenjin.cache.ibm.com.cn,则正确的显示该网页。服务器端的响应对客户端是透明的,客户端不知道请求是由哪台

WEB 服务器处理的;而且其中某台 Squid 服务器或 WEB 服务器发生故障,也不影响服务的正常运行。

总结

Squid 是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度。本文在真实的网络环境下,利用三台 squid

反向代理服务器加速了网站的性能,同时结合 DNS

轮询技术实现了网站的负载均衡。经过一段时间的测试和试运行,该网站的访问速度和可用性方面都有很大的提高,从未出现过网站服务中断情况。

参考资料

squid 3.0 反向代理加速模式配置 :http://www.hiadmin.com/squid-3%E5%8A%A0%E9%80%9F%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE/

Linux 下 DNS 轮询与 Squid 反向代理结合 :http://www.souzl.com/article/2008/1112/article_453.html

在 developerWorks Linux 专区

寻找为 Linux 开发人员(包括 Linux

新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。

在 developerWorks 上查阅所有 Linux

技巧 和 Linux

教程。

关于作者

李明慧 ,在 IBM 中国软件开发中心 BI 团队工作从事

InfoSphere Warehouse Administration Console 的功能测试工作。曾在 DeveloperWorks 发表《将 DB2

DWE 9.1.X 迁移到 DB2 Warehouse 9.5》、《 InfoSphere Warehouse SQL 仓储命令行接口》以及《Linux下利用

squid 反向代理提高网站性能》等文章。