一种基于 SQUID 的 WEB CACHE 技术 刘荫明, 张福俊, 刘谦, 李默山东科技大学, 山东青岛 (266510) E-mail:Liuyinmingming@163.com 摘要 :WEB CACHE 技术是目前用来提高 Internet 站点的访问速度, 并提高站点的稳定性的关键技术 本文介绍了 WEB CACHE 的基本原理 优点及应用,Squid 加速代理的结构 工作机制,Squid 的安装 配置实例 关键词 :squid, 反向代理, 透明代理,cache, 缓存,linux 中图分类号 :TP301 1. 前言 目前,Intranet 几乎已经遍及到我们生活和工作的各个角落, 给我们带来了极大的便利, 但有时其缓慢的网络访问速度和较大的时间延迟又会令使用者们大伤脑筋 影响用户访问速度的主要原因是带宽 距离 服务器能力 随着网站访问量日渐增大 内容不断丰富和用户期望值不断提高, 网站的响应速度 点击负荷量要求提供更快的访问速度和承受更大的负荷量 通过 Web Cache 缓存服务器技术是解决访问距离和提高源服务器能力的有效方法, 也是经济 简单 可快速实施的方案, 比起镜像服务器具有很大的优势 [1][2] 2. Web Cache 基本原理 提到 Cache, 大家自然会想到计算机里面的高速缓存, 实际上,Web Cache 的功用远不止存储和提供数据这么简单 Cache 是作为基于软件的代理服务器的一部分或专门的硬件 ( 容器 appliances) 出现的 出于对 Web 缓存系统扩展性的考虑, 大多数缓存系统将 Web Cache 分散在互联网上, 如图 1 [2] 一般 Web Cache 服务器置于源服务器的前端, 配备大容 图 1 一般缓存系统的 Web Cache 量的内存和高速磁盘, 缓存客户的请求, 所以 Web Cache 服务器又称为服务器加速 (Server accelerate) 源服务器一般不再和客户直接通讯, 当客户请求没有缓存的内容或者动态内容时,Web Cache 服务器向源服务器发送请求, 然后把回应转发给客户, 在这种情况下,Web Cache 服务器通常要为一个请求同时维护两个会话 和普通的代理不同,Web Cache 服务器一般是一台或者有限的几台服务器, 对于客户而言,Web Cache 服务器对于他们就相当于源服务器, 对于源服务器而言,Web Cache 服务器通常就是唯一的客户, 因为一般客户不和源服务器直接通信 典型情况下, 源服务器对于客户或者客户对于源服务器, 都是不可见的 [3][4] - 1 -
在透明方式下, 路由器 负载均衡器和负载均衡交换机可以把通信数据传递给 Cache, 这样, 就无须对浏览器进行改动, 而只要对交换机或路由器进行配置就行了 3. Web Cache 的优点 Web Cache 主要有以下优点 : 本地 Cache 加速 提高了站点的访问速度, 并大大提高以上性质站点的稳定性 保证不同网络中的用户都能得到良好的访问质量 远程用户访问时从 cache 服务器上读取数据, 减少远程访问的带宽 分担网络流量 减轻原站点 WEB 服务器负载等功能 访问控制及监测 缓存引擎为网络管理员提供了一个安全简单的方法, 通过 URL 过滤机制, 可加强基于站点地址的访问控制策略, 能够将用户与某些失效隔离, 即使原始服务器无法达到, 也可以通过 Web 网络缓存系统访问原始服务器的某些内容 同时还可以阻隔某些不好的访问请求 日志管理分析 网络管理员能了解哪些 URL 被点击 每秒缓存服务多少个查询 从缓存提取的 URL 的百分比是多少以及其它操作相关的统计数据 这些日志数据可以用于分析网络带宽的使用情况或网页流量的趋势 集群抗攻击 广泛分布的 Web Cache 节点加上节点之间的智能冗余机制, 可以有效地预防黑客入侵以及降低各种 D.D.o.S 攻击对网站的影响, 同时保证较好的服务质量 4. 基于 Squid 的 Web Cache 加速实现 4.1 Squid 的安装 服务器运行环境为 Red Hat Linux 9,squid 安装包可以从 Squid 站点 www.squid-cache.org 获取该软件的源代码安装包, 包括 gz 和 bz2 两种压缩方式 也可以使用 Linux 的发行版, 如 Red Hat 提供的 RPM 包 [5] RPM 方式安装很简单, 命令如下 : $ rpm -ivh Squid-2.x.STALBx.i386.rpm 我们下载了最新的稳定版 squid-2.5.stable13.tar.gz, 用以下命令解开压缩包 : $ tar xvfz squid-2.5.stable13.tar.gz 用 bz2 方式压缩的包可能体积更小, 相应的命令是 : $ tar xvfj squid-2.5.stable13.tar.bz2 然后, 进入相应目录对源代码进行配置和编译, 命令如下 : $ cd squid-2.5.stable13 配置命令 configure 有很多选项, 如果不清楚可先用 -help 查看 通常情况下, 用到的选项有以下几个 : --prefix=/usr/local/squid # 指定 Squid 的安装位置, 如果只指定这一选项, 那么该目录下会有 bin sbin man conf 等目录, 而主要的配置文件此时在 conf 子目录中 为便于管理, 最好用参数 --sysconfdir=/etc 把这个文件位置配置为 /etc --enable-storeio=ufs,null # 使用的文件系统通常是默认的 ufs, 不过如果想要做一个不缓存任何文件的代理服务器, 就需要加上 null 文件系统 - 2 -
--enable-arp-acl # 这样可以在规则设置中直接通过客户端的 MAC 地址进行管理, 防止客户使用 IP 欺骗 --enable-err-languages="simplify_chinese" --enable-default-err-languages="simplify_chinese" # 上面两个选项告诉 Squid 编入并使用简体中文错误信息 --enable-linux-netfilter # 允许使用 Linux 的透明代理功能 --enable-underscore # 允许解析的 URL 中出现下划线, 因为默认情况下 Squid 会认为带下划线的 URL 是非法的, 并拒绝访问该地址 整个配置编译过程如下 :./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-pthreads --enable-err-language="simplify_chinese" --enable-storeio=ufs,null --enable-default-err-language="simplify_chinese" --enable-auth="basic" --enable-baisc-auth-helpers="ncsa" --enable-underscore # 最后执行 make 和 make install 两条命令, 将源代码编译为可执行文件, 并拷贝到指定位置 make make install 4.2 Squid 的配置 cd /usr/local/squid # 建立缓存目录 make dir cache # 赋予缓存目录权限 chown squid.squid * # 配置 squid 参数信息 vi /usr/local/squid/etc/squid.conf # visible name visible_hostname cache.example.com # cache config: space use 1G and memory use 256M cache_dir ufs /usr/local/squid/cache 1024 16 256 cache_mem 256 MB cache_effective_user squid cache_effective_group squid #web cache 端口 http_port 80-3 -
# 加速的 web 站点 httpd_accel_host www.abc.com httpd_accel_single_host off # 加速的 web 站点端口 httpd_accel_port 80 # 是否保留主机头信息 httpd_accel_uses_host_header on httpd_accel_with_proxy on # accelerater my domain only acl acceleratedhosta dstdomain.example1.com acl acceleratedhostb dstdomain.example2.com acl acceleratedhostc dstdomain.example3.com # accelerater http protocol on port 80 acl acceleratedprotocol protocol HTTP acl acceleratedport port 80 http_access allow acceleratedprotocol acceleratedport acceleratedhosta http_access allow acceleratedprotocol acceleratedport acceleratedhostb http_access allow acceleratedprotocol acceleratedport acceleratedhostc 所有设置完成后, 关键且重要的任务是访问控制 Squid 支持的管理方式很多, 使用起来也非常简单 Squid 可以通过 IP 地址 主机名 MAC 地址 用户 / 密码认证等识别用户, 也可以通过域名 域后缀 文件类型 IP 地址 端口 URL 匹配等控制用户的访问, 还可以使用时间区间对用户进行管理, 所以访问控制是 Squid 配置中的重点 Squid 用 ACL(Access Control List, 访问控制列表 ) 对访问类型进行划分, 用 http_access deny 或 allow 进行控制 根据需求首先定义两组用户 advance 和 normal, 还有代表所有未指明的用户组 all 及不允许上网的 baduser, 配置代码如下 : acl advance 192.168.0.1-192.168.0.255/24 acl baduser src 192.168.0.100/24 acl baddst dst www.123.com acl all src 0.0.0.0/0 http_access deny baduser http_access allow advance http_access allow normal # logging emulate_httpd_log on cache_store_log none # manager acl manager proto cache_object http_access allow manager all cachemgr_passwd pass all 4.3 squid 服务的启用 # 创建缓存目录 : /usr/local/squid/sbin/squid -z # 启动 squid - 4 -
/usr/local/squid/sbin/squid # 停止 squid: /usr/local/squid/sbin/squid -k shutdown # 启用新配置 : /usr/local/squid/sbin/squid -k reconfig # 通过 crontab 每天 0 点截断 / 轮循日志 : 0 0 * * * (/usr/local/squid/sbin/squid -k rotate) 5. 结束语 Cache 对 Web 服务器的加速模式, 由靠近 Web 服务器向靠近用户端发展 随着 Intranet 的发展, 可以在拥挤的主干网上有效地节约带宽, 提高网络稳定性 Web Cache 技术已被认为是减轻服务器负载 降低网络拥塞, 减少客户访问延迟的有效途径之一 参考文献 [1] 乐德广, 郭东辉, 吴伯僖. 网络缓存技术及应用的研究 [J]. 计算机系统应用, 2003,(5):33-35 [2] 王世克, 吴集, 金士尧. Web 缓存技术概述 [J]. 计算机与信息技术, 2005,(6):37-41 [3] Yong H. Shin, Hyokyung Bahn. A scalable Web cache sharing scheme [J]. Information Processing Letters,91(5): 227-232, September 2004 [4] Hyokyung Bahn. Web cache management based on the expected cost of web objects [J]. Information and Software Technology, 47(9):609-621, June 2005 [5] 朱居正, 高沙等.Red Hat Linux 9 系统管理 [M]. 北京 ; 清华大学出版社,2004 A Kind of Web Cache Technology Based on Squid Liu Yinming, Zhang Fujun, Liu Qian,Li Mo Shandong University of Science and Technology, Qingdao, Shandong (266510) Abstract WEB CACHE technology is the key technology to enhance the visit speed and the stability of the Internet web site at present. This article introduces the basic principle, the merit and the application of WEB CACHE, and also explains the structure, work mechanism, installment, and disposition example of Squid acceleration proxy. Keywords: squid; reverse proxy; transparent proxy; cache; buffer; linux - 5 -