`
i.wuyoo
  • 浏览: 11857 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

编程方式刷新Squid缓存服务器的三种方法

阅读更多

目前很多网站都使用Squid作为前端缓存服务器并取得了很好的效果,成都全搜索也分别在网通和电信部署了专门的前端缓存服务器用于缓存图片,视频,静态页面,js等静态资源。

 

 

(全搜索系统架构逻辑示意图)

 

网站进行内容更新是常有的事情,当被缓存的资源更新时,前端Squid缓存服务器内容也必须要相应的更新,否则用户就可能会看到过期的数据。当没有程序支持时就需要每次登录到服务器上执行刷新操作,在服务器数量小的的时候这种方式还可行,如果服务器数量上了一定的规模,这就是一种非常笨重的处理方式,以下分别介绍通过编程方式实现刷新Squid的三种方法:

 

1. refresh_pattern用于配置Squid的刷新策略,当Squid没有配置ignonre-reload来忽略客户端no-cachereload头的时候。

ignore-reload - ignores a client no-cache or reload header. Doing this VIOLATES the HTTP standard. Enabling this feature could make you liable for problems which it causes.ignore-reload,忽略客户端no-cachereload头,这是违反HTTP标准的做法,允许此特性可能导致相关问题.

 

在这种情况下可以通过模拟客户端向服务器发送no-cache头(ctrl + f5就完成此功能)来实现刷新操作。发送的请求头如下:

 

 

(httpwatch关于no-cache请求头的截图)

 

<?php
	/**
	 * 刷新Squid缓存
	 *
	 */
	interface Flush_Cache
	{
		/**
		 * 执行刷新操作
		 *
		 * @param void $url 待刷新的URL地址
		 */
		public function flush($url);
	}
	
	/**
	 * 通过发送HTTP Header头实现刷新功能
	 *
	 */
	class Flush_Cache_HTTP_Header_Impl implements Flush_Cache 
	{
		/**
		 * @see Flush_Cache::flush()
		 *
		 * @param void $url
		 */
		public function flush($url) 
		{
			if(empty($url))
			{
				return;	
			}
			$url_component = parse_url($url);
			global $g_squid_servers;
			
			foreach ($g_squid_servers as $server)
			{
				$squid_params = split(':' , $server);
				$fsocket = fsockopen($squid_params[0], intval($squid_params[1]), $errono, $errstr, 3);
				
				if(FALSE != $fsocket)
				{
					$head = "HEAD {$url_component['path']} HTTP/1.1\r\n";
					$head .= "Accept: */*\r\n";
					$head .= "Host: {$url_component['host']}\r\n";
					$head .= "Cache-Control: no-cache\r\n";
					$head .= "\r\n";
					
					echo $head;
					
					fwrite($fsocket , $head);
					
					while (!feof($fsocket))
					{
						$line = fread($fsocket , 4096);
						
						echo $line;
					}
					
					fclose($fsocket);
				}
			}
		}
	}
	
	$g_squid_servers = array('192.168.2.88:80');
	$flush_cache = new Flush_Cache_HTTP_Header_Impl();
	
	$flush_cache->flush('http://ent.cdqss.com/index.html');
?>

  

2. 通过PURGE头刷新缓存,这需要Suqid配置ACL以允许PURGE请求头,实例如下:

acl AdminBoxes src 127.0.0.1 172.16.0.1 192.168.0.1

acl Purge method PURGE

 

http_access allow AdminBoxes Purge

http_access deny Purge

 

打开配置之后可以使用如下的请求头来完成删除操作

PURGE http://www.lrrr.org/junk HTTP/1.0
Accept: */* 

上个例子代码中,把HEAD修改为PURGE即可,如下:

$head = "PURGE {$url_component['path']} HTTP/1.1\r\n";

$head .= "Accept: */*\r\n";

$head .= "Host: {$url_component['host']}\r\n";

$head .= "Cache-Control: no-cache\r\n";

$head .= "\r\n";

 

 

 

3. 通过使用多播HTCP包来完成Squid清理,这是MediaWiki目前正在使用的方法,当wiki更新时用于更新全球的Squid缓存服务器,实现原理为:发送PURGE请求到特定的多播组,所有Squid服务器通过订阅该多播组信息完成删除操作,这种实现方式非常高效,避免了Squid服务器处理响应和建立TCP连接的开销。参考资料:Multicast HTCP purging 

 

发送no-cache头的方式在很多情况下不适用,因为大多数站长都会配置ignore-reload来阻止no-cachereload头以提高Squid的命中率;通过适当的权限控制PURGE清理将是一种非常简单可行的方式,考虑到安全问题我们可以仅允许特定的主机进行PURGE清理操作,对第12种方式进行简单的变通就可以用于管理较大规模数量的前端缓存服务器 - 我们可以在被允许的主机上提供一个专门的后台刷新队列,这个刷新队列在接收到刷新操作时就多线程的向前端服务器发送删除指令,这样就达到了同步刷新的效果。第3种方式没有进行过尝试,因为需要安装相应的补丁,并进行配置,操作成本相对较高,在服务器数量特别巨大的情况下这无疑是一种非常高效的实现方式。

<!--EndFragment-->

  • 大小: 30.1 KB
  • 大小: 28.6 KB
分享到:
评论

相关推荐

    squid缓存服务器的研究

    Squid 作为一种高效的缓存服务器解决方案,在提高网络访问速度、优化带宽利用等方面发挥着重要作用。通过合理配置 Squid 的各项参数,结合其丰富的访问控制功能,能够满足不同场景下的需求,为企业和个人用户提供更...

    刷新squid缓存脚本

    清理squid缓存,直接执行sh 脚本名,不过还需要知道要清理的squid服务器列表和需要清理的url列表

    squid缓存服务器的配置

    ### squid缓存服务器的配置详解 #### 一、概述与背景 Squid是一个高性能的代理缓存服务器,主要用于加速Web浏览,减少对外部网络的带宽需求,提高响应速度,以及提供一定的安全性和访问控制功能。在企业、教育机构...

    squid 配置缓存服务器

    ** squid 配置缓存服务器** Squid 是一个广泛使用的开源 HTTP 代理服务器和缓存系统,它能够显著提高网络访问速度,减轻服务器负载,同时提供内容过滤、访问控制等功能。在本文中,我们将深入探讨如何配置 Squid ...

    缓存代理服务器Squid-教程

    Squid是一个高性能的代理缓冲服务器,也许你已经用过Windows平台下的WinGate,MS Proxy Server等功能类似的产品。Squid是一个应用级代理,在保证客户端主机和服务器主机网络连通后,需要客户端软件做相应的设置后...

    Squid缓存代理服务器的安装与配置(普通代理 透明代理 反向代理)

    Squid缓存代理服务器是一种流行的代理服务器和Web缓存服务器软件,广泛应用于提高Web服务器速度、缓存万维网、域名系统和其他网络搜索、帮助网络安全等方面。Squid服务器主要设计用于在Unix一类系统运行。 Squid...

    搭建一个大型网站架构的实验环境(Squid缓存服务器篇).pdf

    在构建大型网站架构的实验环境中,Squid缓存服务器扮演着至关重要的角色。Squid是一个开源的HTTP代理缓存服务器,它能够显著提高网络性能,减少对远程服务器的请求,同时提供缓存和访问控制功能。在这个实验环境中,...

    squid缓存详细配置

    文档为squid缓存服务的配置文档,系统为CentOS部署,本人自己部署成功后整理的文档,绝对清晰。

    Squid代理服务器原理

    关于学习Squid,你可以参考"第八集 Squid代理服务器原理.wmv"这个视频,它应该会详细讲解Squid的配置和使用方法。"LAMP兄弟连 原创PHP、LAMP视频"可能包含有关如何在Linux环境安装和配置Squid的信息,而"PPT等下载...

    利用Linux和Squid建立缓存代理服务器的优化方案研究.pdf

    在本文中,作者探讨了如何利用Linux操作系统和Squid软件构建一个优化的缓存代理服务器。Squid是一个开源的代理服务软件,允许用户自由使用和修改,常用于提高网络访问速度和效率。在基于Linux的环境中,Squid作为...

    搭建Linux下的Squid代理服务器

    在 squid.conf 文件中,可以对 Squid 的访问控制策略进行配置,例如,设置访问控制列表、访问控制规则、缓存刷新策略等,以保证代理服务器的合法使用。 搭建 Linux 下的 Squid 代理服务器需要对 Squid 软件的安装、...

    squid代理服务器泄露客户ip和服务器信息的解决.pdf

    解决方法:squid 代理服务器的配置文件 squid.conf 中添加以下两行代码: header_access Via deny all header_access X-Forwarded-For deny all 这两行代码将禁止squid 代理服务器传递Via 和 X-Forwarded-For 头...

    基于Linux的Squid代理服务器配置.doc

    Squid 代理服务软件是一种基于 Linux 的开源代理服务器软件,提供了强大的缓存、过滤、加速等功能。Squid 代理服务软件可以帮助用户: * 缓存频繁访问的网页,提高网络访问速度 * 过滤不良内容,保护用户的网络安全...

    构建Linux下的Squid代理服务器.pdf

    Squid是一个开源的高性能代理缓存服务器,适用于多种操作系统,包括Linux。它主要用于提高网络访问速度,减少网络流量,以及对网络活动进行监控和管理。 在Linux环境中安装Squid,通常需要以下步骤: 1. 更新系统...

    Squid for windows 反向代理缓存服务器配置软件

    Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该...

    Squid代理服务器配置

    Squid是一个强大的开源代理缓存服务器,专为提高内部网络用户访问互联网的速度和效率而设计。它在Linux系统中广泛应用,支持多种网络协议,包括HTTP、FTP、gopher、SSL和WAIS,使得网络流量得以优化,同时提高了客户...

    基于Linux网络系统的Squid代理服务器的构建.pdf

    本文主要介绍了三种类型的Squid代理服务器:传统代理、透明代理和反向代理。传统代理需要客户端在浏览器中指定代理服务器的地址和端口号,对于局域网来说,通过代理服务器可以接入Internet,但一般只能访问Web网站和...

    Squid cache(简称为Squid)代理缓存服务器

    Squid Cache,通常简称为Squid,是一款广泛应用的开源代理服务器和Web缓存系统。它基于GNU通用公共许可证(GPL),允许用户免费获取、使用、修改和分发源代码。这款强大的软件旨在提高网络性能,通过在本地存储经常...

Global site tag (gtag.js) - Google Analytics