刷新squid缓存的php脚本

13 Jan 2010 Posted in  CDN

<?php
interface Flush_Cache
{
    public function flush($url);
}
class Flush_Cache_HTTP_Header_Impl implements Flush_Cache
{
    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.1rn";
                $head .= "Accept: */*rn";
                $head .= "Host: {$url_component['host']}rn";
                $head .= "Cache-Control: no-cachern";
                $head .= "rn";
                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');
?>
继续阅读……

Squid的ACL分类

10 Jan 2010 Posted in  squid

在找http_status的acl用法时,看到这么一句“This clause supports both fast and slow acl types”。acl还分快慢呢~~赶紧去wiki看:http://wiki.squid-cache.org/SquidFaq/SquidAcl#Fast_and_Slow_ACLs 继续阅读……


client-cache-origin之间的session问题

09 Jan 2010 Posted in  CDN

昨天,突然接到某客户的邮件,表示他们质疑我们cache对其多originserver的轮询不均等,以至于影响到网站的访问。
听起来不是什么难题,把服务器上的DNSCache进程中止掉,不就能平均轮询了么?可是操作完成后,客户依然不认可……于是开始细细探讨具体的错误问题所在。
原来实际情况是这样:点击其网站的回复、收藏等动态页面时,时常会弹出错误页面。对这个错误页面,客户的解释是“session状态CDN加速未保留”。
由此解释,我觉得cache上的问题恰恰相反,正是因为均等轮询了导致的。而客户其他一些单源的域名服务正常,也证明了这点。
上cache服务器查看配置,使用的默认keep-alive设置,也就是对client和origin都开启了keep-alive,默认时间为2min。但实际上并没有起作用。在测试中,可以看到这样的日志: 继续阅读……


squid3新acl类型http_status试用(源站故障转向研究)

09 Jan 2010 Posted in  squid

今天试着自己编译安装了squid3.1,然后开始移植2.6的配置文件。在squid.conf.document(2.6里的squid.conf.default)里看了很久,发现不少新东西。跟转向有关的,便发现一个: 继续阅读……


虚拟机时间问题的机制原理及解决办法

05 Jan 2010 Posted in  cloud

对于CDN来说,时间是个非常重要的概念,squid的缓存刷新控制,全都是以服务器时间为基准。在我博客的前不知道几篇的某文中,就提到过因为时间的原因引起的刷新事故。而最新的一次,是公司在日志流量统计时,因为相差太大导致截取失败——这可都是钱呢。
实际工作中,大多会搭建一个NTP服务器,给应用服务器提供时间同步服务。但虚拟机在这方面有个问题。虚拟机的时间是读取的宿主机的硬件时钟,随便你date
-s 1234怎么改,下一次date查看,都会恢复成原样。
这样看起来是个好事,因为这样可以省略掉大批机器的NTP服务器同步时间的压力。但糟糕的事情在后头:一大批重要客户的虚拟机,在运行上半年以上时间后,date都比真实时间超前了(偶然我也看到过一次滞后的)。或许是几分钟,或许是几小时!!
这一度让我很无奈,因为即使我重启虚拟机,这个诡异的date也依然倔强的按照它自己的时钟前进。看起来办法只有一个:把虚拟平台整个的重启——好在这种试验的结果是有效的,不然真不知道怎么办了。
从这个无奈的办法中,也应该可以推测出一个结论,虚拟机的时钟,应该是另有文件存储在虚拟平台的某个临时文件里。所以关闭虚拟机,该文件还存在并继续计时;重启动虚拟平台,该文件才会重计。至于这个文件叫什么,存放在哪里,一时半会我就找不到了,或许这个问题不算什么特别大的问题,至少我在linuxsir.org的《xen初学指南》中,没有找到关于时钟的配置说明。
不过再小的问题也顶不住人的研究。于是我找到了另一篇很对口的文章:《虚拟机中GUEST OS时钟(TIMEKEEP)问题的探讨》。
文章告诉我们:虚拟机的时钟,与真实机的时钟区别,其一在于其处理不是抢占中断而是延迟处理;其二在于其中断模拟软件可能因资源占用问题被推迟。
这两点区别,导致的结果却是一个,就是一旦服务器负载变高,时钟中断就被排到后头去了……
文章也提出了解决办法,一个是编程,让系统补上中断的时间,这个俺就不说了;一个是修改内核,让系统不断修正date;
进一步问题:不管哪个办法,第一,加重了虚拟机负载;第二,这又依赖与系统去更新date的进程的精准度,而这个进程的中断时钟如果有偏差的话,……
再进一步方法……有兴趣的还是自己点文章看吧。
看起来这个问题就要永远终结在此了。
不过变通的主意及时的出现了——既然虚拟机跟虚拟平台之间的异步时钟同步没法解决,我们就干脆不要虚拟机跟虚拟平台同步了。这样虽然对NTP的压力大了,但毕竟保证了CDN的正常。而且从上头的原理可以知道,能够导致date偏差到这个程度的原因,大概也是因为虚拟机的负载压力太大。事实上,我们为了保证冗余,也是尽量避免这种压力出现的。那么date偏差的服务器,其实也就是少数了。
顺着这个思路一查,原来办法其实很简单——修改虚拟机的independent_wallclock值即可:
echo 1 > /proc/sys/xen/independent_wallclock
或sysctl xen.independent_wallclock=1
启用虚拟机独立系统时间;
/etc/init.d/ntpd stop
ntpdate 192.168.0.1
就能完成NTP时间同步了;
再date看看,时间果然就更正了~~
/proc下的文件都是进程使用中的文件,如果要让虚拟机开机自动读取配置,把这个修改写进/etc/sysctl.conf才行哦:
echo “xen.independent_wallclock = 1” » /etc/sysctl.conf
就这么简单~~~ 继续阅读……


squid限速

01 Jan 2010 Posted in  squid

squid有个delay_pool,可以做限速,虽然效果不太准~(嗯,就像限制并发连接数的maxconn一样)
首先搬个老虎皮做大旗——《Squid: The Definitive Guide》的相关段落: 继续阅读……


squid请求处理流程(源站故障转向研究)

31 Dec 2009 Posted in  squid

今天继续想别的办法,第一,当然还是修改源代码,这个C++可惜俺不懂,只是大略的通过百大哥谷大婶知道了squid的请求处理流程: 继续阅读……


awk中让人郁闷的system()函数

30 Dec 2009 Posted in  bash

发现一个特尴尬的事实。我辛辛苦苦去百度资料,想用rewrite实现针对不同域名源站故障后的自动跳转功能,但整个思路里遗漏了一个严重的问题。 继续阅读……


squid3 的 gzip 支持

30 Dec 2009 Posted in  squid

标题很简单,内容很复杂,而且我也用不上。姑且存档吧:
原标题《VIGOS eCAP GZIP Adapter for SQUID Proxy Cache》
第一句话就让我很绝望,本插件只适用于squid3.1及以上版本——squid有比3.1更高的版本么——前文提到的有session控制的squid2.7我都还没看呢~哭 继续阅读……


url_rewrite_program(squid游戏恶搞~)

30 Dec 2009 Posted in  squid

标题很引人吧。其实是我在查找squid的rewrite资料时,看到的一篇文章。原作者突发奇想,准备让公司的同事们上网时,看到的所有图片全都倒过来180°。嘿嘿,小样,还不拧断你们脖子~~ 继续阅读……


url_rewrite_program(首次访问跳转)

30 Dec 2009 Posted in  squid

上文提到,squid大多数的rewrite_program是用perl编写的。现在就转几个简洁明了的redirect.pl。虽说我至今没把perl基础教程看完。不过从中领会一下squid的rewrite流程,还是可以的: 继续阅读……


squid_session(首次访问跳转)

30 Dec 2009 Posted in  squid

上文perl例二中提到的第一次上某网站时先跳转公司主页。在CU上看到另一种办法。即在squid2.7以上版本中,有个squid_session。操作如下:
首先是安装:
安装squid ( for 2.7 stable )
修改源代码:vi src/errorpage.c 60行处将 继续阅读……


nginx502错误

30 Dec 2009 Posted in  nginx

NGINX 502 Bad Gateway错误是FastCGI有问题,造成NGINX 502错误的可能性比较多。将网上找到的一些和502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手: 继续阅读……



查看一些常见应用的编译选项

13 Dec 2009 Posted in  linux

  • nginx:
    bash [rao@localhost ~]$ /home/nginx/sbin/nginx -V|grep conf nginx version: 0.7.54 built by gcc 4.1.2 20080704 (Red Hat 4.1.2-44) configure arguments: --prefix=/home/nginx --with-pcre --with-http_stub_status_module --without-http_memcached_module --without-http_fastcgi_module apache: [rao@localhost ~]$ cat /home/apache2/build/config.nice #! /bin/sh # # Created by configure CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"; export CFLAGS "./configure" "--prefix=/home/apache2" "--enable-static-support" "--enable-rewrite" "--with-mpm=worker" "--enable-logio" "--enable-so" "--enable-mime-magic" "--disable-cgid" "--disable-cgi" "--disable-userdir" "--disable-dir" "--disable-include" "--disable-filter" "--disable-env" "--disable-setenvif" "--disable-status" "--disable-autoindex" "--disable-asis" "--disable-alias" "--disable-actions" "--disable-authn-file" "--disable-authn-default" "--disable-authz-default" "--disable-authz-groupfile" "--disable-authz-user" "--disable-auth-basic" "CFLAGS=-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" "$@" 继续阅读……


引号的魔力

04 Dec 2009 Posted in  bash

[root@neteasesquid1 ~]# i=1.2.3.4;awk -v OFS="tt" 'BEGIN{print '"$i"',"'"$i"'","'$i'",""'$i'""}'
1.20.30.4
1.2.3.4
1.2.3.4
1.20.30.4

以前用awk调用shell变量时,一般都是文字字符串,看不出什么问题来;今天突然用上ip,发现输出结果显示不正常。于是做了如上实验。
但是原因嘛,还是不知道……
继续做下一个实验:
bash [rcl@ubuntu:/win/learning/myshell]$ i=1.2.3;echo "1.2.3.4"|awk '/'"$i"'/{print}' 1.2.3.4 [rcl@ubuntu:/win/learning/myshell]$ i=1.2.3;echo "1.2.3.4"|awk '/"'$i'"/{print}' [rcl@ubuntu:/win/learning/myshell]$ i=1.2.3;echo "1.2.3.4"|awk '/'"$i"'/{print "'$i'"}' 1.2.3 [rcl@ubuntu:/win/learning/myshell]$ i=1.2.3;echo "1.2.3.4"|awk '/'"$i"'/{print '"$i"'}' 1.20.3 [rcl@ubuntu:/win/learning/myshell]$ i=1.2.3;echo "1.20.3.4"|awk '/'"$i"'/{print}' [rcl@ubuntu:/win/learning/myshell]$ i=1.2.3;echo "1.20.3.4"|awk '/"'$i'"/{print}'
所以最终结果,在regex里,awk引用shell变量是’“$i”‘,而在’{}’里则要写成”‘$i’“。乱呀…… 继续阅读……


sed子命令集

23 Nov 2009 Posted in  bash

1.:
用法:
:lable
在脚本中标记一行,用于实现由b或t的控制转移。Label最多可以包含7个字符 继续阅读……


一种CDN中的动态数据存储方案——UbDP

22 Nov 2009 Posted in  CDN

上回百度到这篇文章,于是上维普下载了来看,为方便阅读,贴在这里。 继续阅读……


nginx编译优化压力测试(转)

21 Nov 2009 Posted in  nginx

默认nginx使用的GCC编译参数是-O,需要更加优化可以使用以下两个参数: 继续阅读……


squidclient用法

21 Nov 2009 Posted in  squid

squidclient是squid自带的一个小工具,一般用的最多的,就是-m purge URL了。
其实还有别的用法(看看help吧,不过这个慢慢来~~)先说一个大全式的用法(其他的具体用法,大不了用这里rep出来好了):squidclient -p 80 mgr:info,显示如下: 继续阅读……


让squid访问日志显示完整url

21 Nov 2009 Posted in  squid

一大串的header结束了,从上篇开始回到squid.conf本身的设置上来。 继续阅读……


cache驻留时间(四、If-Modified-Since)

21 Nov 2009 Posted in  CDN

话接上回If-Modified-Since,当squid开启reload_into_ims on之后,no-cache头会在在浏览器上被转化成If-Modified-Since标识返回给web服务器。从整体架构考虑,因为squid上已经破坏了http协议的规定,那么web端就必须主动承担对网页过期的识别管理工作。嗯,要是所有的网站都能从一规划开始就这么搞,俺们干CDN的可就轻松了~~~ 继续阅读……


cache驻留时间(五、Etag)

21 Nov 2009 Posted in  CDN

浏览器的请求中,除了用If-Modified-Since去比对Last-Modified以外,还有另一个标签Etag,这个东东是web服务器比较有用的,squid倒没什么。不过大文件下载加速也有采用apache的系统,一并算在cache缓存里头讲吧: 继续阅读……


cache驻留时间(六、大文件)

21 Nov 2009 Posted in  CDN

话说上回提到大文件下载,公司除了apache以外,有些也是用squid做的。这回说说这方面的设置。
下载业务,首先要注意到的,第一是多线程,第二是断点续传。 继续阅读……


cache驻留时间(三、Expires/Cache-Control)

20 Nov 2009 Posted in  CDN

在谈cache的时候插入了上一篇回忆正则表达式的内容,是因为最近一个客户的古怪要求“url以/结尾或文件夹结尾的不能缓存”。 继续阅读……