??xml version="1.0" encoding="utf-8" standalone="yes"?>
wget http://www.wa.apana.org.au/~dean/sources/purge-20040201-src.tar.gz
tar zxvf purge-20040201-src.tar.gz
cd purge
make
[root@cache purge]# ./purge -help
### Use at your own risk! No guarantees whatsoever. You were warned. ###
$Id: purge.cc,v 1.17 2000/09/21 10:59:53 cached Exp $
Usage: purge [-a] [-c cf] [-d l] [-(f|F) fn | -(e|E) re] [-p h[:p]]
[-P #] [-s] [-v] [-C dir [-H]] [-n]
-a display a little rotating thingy to indicate that I am alive (tty only).
-c c squid.conf location, default "/usr/local/squid/etc/squid.conf".
-C dir base directory for content extraction (copy-out mode).
-d l debug level, an OR of different debug options.
-e re single regular expression per -e instance (use quotes!).
-E re single case sensitive regular expression like -e.
-f fn name of textfile containing one regular expression per line.
-F fn name of textfile like -f containing case sensitive REs.
-H prepend HTTP reply header to destination files in copy-out mode.
-n do not fork() when using more than one cache_dir.
-p h:p cache runs on host h and optional port p, default is localhost:3128.
-P # if 0, just print matches; otherwise OR the following purge modes:
0x01 really send PURGE to the cache.
0x02 remove all caches files reported as 404 (not found).
0x04 remove all weird (inaccessible or too small) cache files.
0 and 1 are recommended - slow rebuild your cache with other modes.
-s show all options after option parsing, but before really starting.
-v show more information about the file, e.g. MD5, timestamps and flags.
1.清除URL中包含jackbillow.com的所有缓?br />
./purge -p 127.0.0.1:80 -P 1 -se 'jackbillow.com'
2.清除 URL ?#8220;.mp3”l尾的缓存文Ӟ例如Q?a target="_blank">http://www.jackbillow.com/abc/test.mp3
./purge -p 127.0.0.1:80 -P 1 -se '\.mp3$'
]]>
起初Q考虑~存命中率不高,考虑是不是给Squid的内存不够,所以就加大了内存配|,2G内存的机器给Squid 1G用,试了两天,l果基本没有什么大的改变;于是调整refresh_pattern的参敎ͼ增大内容~存旉Q测试了两天Q效果也不理惟?/p>
从kxn的文章中知道可以使用Expires模块让Apachel文件指定缓存时_期望可以提高~存性能Q于是在服务器上Q?br />
ExpiresActive On
ExpiresDefault A2592000
l果W二天一早发现缓存命中率竟然比前一天还下降?个百本点Q有Ҏ了~
于是cachemgr配置hQ详l地查squid的运行状况,发现1G的内存缓存实际只用了不到300MQ所以显然不是内存不够的问题?/p>
Z充分利用内存Q将maximum_object_size_in_memory调大?28KBQ让其可以缓存更大的文gQ而不是默认的8KB。顺手将ufs换成aufsQ启用异步IO?/p>
之后情况E有改善Q?个小时之后,内存的占用达C1GQ但命中率ƈ没有明显上升?/p>
于是又调整了内存的覆盖策略(memory_replacement_policyQ,听从kxn的教Ԍ使用lruQ发现变化不大,也许是我们的讉K量还不大的原因吧?/p>
q时候缓存命中率仍然?0%以下徘徊。是不是我们的网站结构媄响只能达到这么高呢?但是|站l构我没有办法改变,所以还是要从其他方面入手来解决问题?/p>
于是使用Cache Manager 仔细的查看各个统计数据,当看到In-Memory and In-Transit Objects目Ӟ发现一个问题,那就是所有的|页文g都显CNOT_IN_MEMORYQ这比较奇怪了Q问什么访问量最大的|页文g竟然没有被缓 存到内存呢?是因为文件太大还是因为文件请求的数量太少Q所以才没有被缓存呢Q于是找了一个页面作试Q用工h看了q回的大,只有40K多一些,?我的maximum_object_size_in_memory最大?28KBq有相当大的差距Q所以不可能是这个原因。于是有使用abE序对这个页 面做?000ơ请求,心想q下M~存了吧。可是查看缓存内容,依然没有Q而且不但内存中没有,p盘上也没有Q?/p>
x得出l论Q一定是什么原因阻止了Squid对这些网进行缓存。仔l的查In-Memory and In-Transit Objects中的内容Q发现IN_MEMORY 状态的对象基本都是jpg和gif囑փ文gQhtml,css{文本文件内容则都没有缓存?/p>
q两U文件有什么不同吗Q记忆中Squid也没有对q些文gcd的设定呀Qrefresh_patternҎ有的静态文件的讄也都是一致的Q所以差异不应该来源于squid本n——也是因ؓq种记忆使得我后来多费了许多的功夫~
在Apache上找C文本文g与图像文件之间设|的差异——deflate压羃。是不是所有用deflate压羃的内定w不会~存呢?使用同样 的squid软g版本及配|文Ӟ相同的Apache软g版本和配|,快速的搭徏了一套测试环境。squid只有1収ͼ重徏其磁盘缓冲区Q重新启?squidQ观察内存中对象的变化。果Ӟ对于deflate压羃的内容,squid内存中没有缓存,盘也找不到。停止apache的deflate?能,重新h面Q立卛_squid的内存中查到了内容的~存Q这么看来是squid和deflate不太兼容了?
好吧Q先品环境Apache的deflate停掉Q过了一D|_有两台squid的缓存命中了提高C94%Q虽然只提升?个百分点Q但是这充分验证了squid和deflate不兼容的观点?/p>
然而,事情到此才刚刚开始!
NSquid真的无法~存deflate压羃的页面吗Q好吧google一下,squid+deflateQ在squid的邮件列表中扑ֈ了一?讨论deflate的东西,属于比较古老的吧,说因为deflate压羃之后Q会产生Content-Encoding: gzipq样的HTTP头部Q属于HTTP/1.1的内容,而Squidq不完全兼容HTTP/1.1之类的,需要用Transfer-Encoding 之类的代替,可是mod_deflate和mod_gzip产生的头部就是Content-EncodingQ怎么办?
Z解决q个问题Q引入了另一个Apache的模块,mod_headersQ用它来改写HTTP应答的头部,Content-Encoding更改lTransfer-EncodingQ可是,很自然的Q页面一片ؕ码!说明此\不通啊Q?/p>
又以Content-Encoding为关键字Q快速的搜烦了一下squid 2.6STABLE2的源代码Q也没有发现几个地方用到q个东西Q无果?/p>
l箋Google之,squid+can’t cache+Content-Encoding扑ֈ一文章,其中?#8217;SQUID would never bother to cache ANYTHING that had
a “Vary:” header on it.’ 看来Squid~存内容与Vary: 头部有关pR再ơ检查一下HTTPhq回的头部内容,发现对于deflate压羃的内容,拥有”Vary: Accept-Encoding”q样一个头部,而没有经qdeflate压羃的内容则没有q个头部Q这ơ看来问题比较清楚了Q因为deflate压羃?加了Vary: Accept-Encodingq个头部Q导致了内容无法被squid~存?/p>
那么N真的没有办法让squid~存deflate压羃之后的内容吗Q?/p>
Z上面的经验,很自然的惛_使用mod_headers模块的功能将Vary头抹掉Squid不就可以~存了吗Q后来一惻Iq样会有其它问题Q?1)如果用户览器不支持gzip压羃功能Q那么将无法正常的浏览网;2)其它可能很重要的Vary内容也没有了Q可能会D更大的隐患。那么这U办?不行?/p>
q有其它的办法吗Q再ơ的快速搜索了Squid的源文g中关于Vary的内容,在Changelog中找Cq么一条:
- Full ETag/Vary support, caching responses which varies with request details (browser, language etc).
也就是说已经完全支持带ETag/Vary头部的内容缓存了。这一条出现在Changes to squid-2.6.STABLE1Q也是说在Squid2.6STABLE1已l完全实Cq个功能Q那?.6STABLE2应该没有问题Q会?会是2.6STABLE2的BUG呢,查询了一?.6pd的所有ChangelogQ没有提到此故障的信息。推断我们的故障要么׃个未知BUGDQ?要么是自己配|不当。BUG的问题我无法认Q只能先从配|入手?/p>
找来一?.6STABLE2带的默认配置文gQ搜索VaryQ第一条:
# TAG: cache_vary
# Set to off to disable caching of Vary:in objects.
#
#Default:
# cache_vary on
N我的配置文g是off不成Q赶紧检查,发现q真是offQsignQ原来就是这个问题折我Q改成onQ将Apache的Deflate配置启用Q再观察内存对象Q发现静态网늜的被~存了!
郁闷了许久,l于可以村֏气了?/p>
q了一会儿Q再查看Squid的状态,发现~存命中率没有下降,E_?4%左右?/p>
也许Squidq有什么可挖掘的空间吧Q改天接着折腾Q?/p>
后记QSquid对Vary和Etag的支持属?.6的一主要改q,q一Ҏ改qSquid对HTTP/1.1标准的支持。在Squid升 ?.6之前Q也看过他的ChangelogQ但当时q不明白Vary到底有什么用途,q么一折腾Q明白了不少。看来应该把HTTP/1.1的标准再好好 研读一下?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/chinalinuxzend/archive/2007/09/12/1781563.aspx
其实真的很容?是吧.有个https_port和cache_peer加上那个ssl的地址基本好?记的https_port要加defaultsite.不加会下面错
The following error was encountered:
Invalid Request
Some aspect of the HTTP Request is invalid. Possible problems:
Missing or unknown request method
Missing URL
Missing HTTP Identifier (HTTP/1.0)
Request is too large
Content-Length missing for POST or PUT requests
Illegal character in hostname; underscores are not allowed
?/p>
可以使用下面命o可以生成试用的证书Q?/p>
openssl req -new -keyout key.pem -nodes -x509 -days 365 -out cert.pem
如果要生成一个证书请求用于申h式证书请用下面两个命令:
1.生成U钥 openssl genrsa -out key.pem 1024
2.生成待签名证?openssl req -new -out req.csr -key key.pem
然后req.csr文g中的内容提交l证书颁发机构?/p>
#squid/sbin/squid -z //W一ơ启动squid服务时必输入此命o
如果有错误提C,h查你?cache目录的权限?/p>
2、对你的squid.conf 排错Q即验证 squid.conf ?语法和配|?/span>
#squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误Q这里会q回提示你,如果没有q回Q恭喜,可以试启动squid?/p>
3、在前台启动squidQƈ输出启动q程?/span>
#squid/sbin/squid -N -d1
如果有到 ready to server requesQ恭喜,启动成功?/p>
然后 ctrl + cQ停止squidQƈ以后台运行的方式启动它?/p>
4、启动squid在后台运行?/span>
#squid/sbin/squid -s
q时候可?ps -A 来查看系l进E,可以看到俩个 squid q程?/p>
5、停?squid
#squid/sbin/squid -k shutdown
q个不用解释吧?/p>
6、重引导修改q的 squid.conf
#squid/sbin/squid -k reconfigure
q个估计用的时候比较多Q当你发C的配|有不尽你意的时候,可以随时修改squid.confQ然后别忘记对你?squid.conf排错Q然后再执行此指令,卛_让运行中squid重新按照你的squid.conf 来运行?/p>
7、把squidd到系l启动项
~辑 /etc/rc.d/rc.local
d如下行: /usr/local/squid/sbin/squid -s
当然Qƈ不是每个人都喜欢q种启动方式Q你可以用你最习惯的方?或者把它安装ؓ服务?/p>
再来点其他的?/p>
1、修改cache ~存目录的权限?/span>
#chown -R squid:squid /home/cache
我的cache~存目录?/home/cache,squid执行用户和用L?squidQsquid?/p>
2、修改squid 日志目录的权?/span>
#chown -R squid:squid /usr/local/squid/var/logs
q一步ƈ不是适合每一个用squid的用?意ؓ让squid有权限在该目录进行写操作 ?/p>
例如生成 access.log cache.log store.log
3、查看你的日志文?/span>
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squidq行q程中,有那些文件被squid~存到内存中Qƈq回l访问用戗?/p>
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squidq行q程中,有那些文件被squid~存到cache目录中,q返回给讉K用户?/p>
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squidq行q程中,有那些文件没有被squid~存Q而是现重原始服务器获取ƈq回l访问用戗?/p>
关于 TCP_XXXX {参数及代表的信息,请参看www.chinaunix.org彭勇华《squid中文权威指南?3.2.1 章节?/p>
当然Q本例中的蓝色文字是可以修改为其他的参数Q例如你的域?www.xxxx.com Q同样可以看到access.log里关于该域名的行?/p>
4、squid -k rotate 轮换squid的日志文?var/log/squid,Squid代理服务器日志文?/span>
的增镉K度是惊人的,很容易点球满盘I间Dpȝ不能正常工作,甚至是死?Z解决日志文g增长太快的问?squid采用?轮换"的方?在squid.conf中可以通过logfile_rotate来设|文件轮换的个数,?
logfile_rotate 10 ,轮换的工作一般用crontab定时器完在周期性的日志轮换,例如每周六凌?:00q行日志轮换,则执行如下命? crontab -e
0 2 * * 6 squid -k rotate
脓?Squid默认的错误提CZ息ؓ英文,对于英文不好的用h?实在不方??etc/squid/squid.conf里添加如?
error_directory /usr/share/squid/errors/Simplify_Chinese 卛_昄中文的错误提C?/p>
#对多媒体文g的防盗链,能让播放器在U播?但不能盗?
acl legalplayer browser -i ^windows-media-player ^RealMedia ^Mozilla ^foobar2000 ^nsplayer ^contype$ ^rma
acl mfurl url_regex -i \.wma$ \.wmv$ \.mp3$ \.mp4$ \.flv$ \.avi$ \.asf$ \.mpg$ \.mpeg$ \.rmvb$ \.rm$
http_access allow legalplayer mfurl
http_access deny !legalreferer mfurl