Squid加速是大访问量下的一个常用加速技术。对于动态产品,需要有更新接口才能保证用户体验。
Squid中需调整配置,打开控制权限。
acl manage src THE_IP/THE_MASK
acl Purge method PURGE
http_access allow manage Purge
默认状态下,PURGE是Deny的。
重启后,可以在Telnet下测试一下:
telnet my_squid 80
PURGE HTTP/1.0 Accept: */*
接下来,写一个服务,用于刷新:
/**
* Need php with --enable-socket
* Param:
* $ip $port $out
* return $in
*/
function socket_service($ip, $port='80', $out=""){
if(trim($ip)=="")return "Error: without dest host!";
if($out=='') $out="GET / HTTP/1.1rnHost: $iprnrn"; // Create a new socket
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // An example list of IP addresses owned by the computer
$sourceips['internal'] = '192.168.103.53';
$sourceips['external'] = '61.135.151.40'; // Bind the source address
socket_bind($sock, $sourceips['internal']); // Connect to destination address
socket_connect($sock, $ip, $port);
trace($out);
// Write
socket_write($sock, $out); // Read
$return=socket_read($sock,100000);
// Close
socket_close($sock); // Return
return $return;
}
在更新内容的PHP程序中,调用这个函数,$url是显示内容的页面地址:
[php code]
$squid_dv=array("10.10.82.83","10.10.82.87");
$request="PURGE $url HTTP/1.0rnAccept: */*rnrn";;
foreach($squid_dv as $key => $ip){
$result=socket_service($ip,80,$request);
trace($result);
}
在这里例子里面,是两台Squid服务器,我分别调用了一下。如果Squid服务器很多,可能给服务器造成较大负担,就不合适了。这种Squid群,可以配置成不同的层次。有机会下次再写。
~~呵呵~~
阅读(1593) | 评论(0) | 转发(0) |