安装运行squid后用命令:

squidclient -t 1 -h localhost -p 80 mgr:info 查看命中率情况


Request Hit Ratios:     5min: 99.6%, 60min: 98.7%    Cache Request命中率

 Byte Hit Ratios:        5min: 100.0%, 60min: 100.0%    Cache Byte命中率


如果命中率低 则

1  apache中的模块 mod_expires是否打开

2  调整squid中的参数


# cache_mem 8 MB

 cache_mem 64 MB


# maximum_object_size 4096 KB

maximum_object_size 16384 KB


# maximum_object_size_in_memory 8 KB

maximum_object_size_in_memory 256 KB


# ipcache_size 1024

ipcache_size 2048


#Default:

cache_dir ufs /usr/local/squid/cache 2048 32 512

3  如果apache中使用了deflate压缩    设置   cache_vary on

4 如果用nginx 可以用第三方模块mod_urlhash 提高命中率


nginx过滤不良访问提高squid的命中率:


.1、对静态内容加以问号的访问


例如http://www.7jiejie.com?abc,这样的请求会透过squid缓存,直达后端服务器,并且在squid中保存缓存,从而造成压力和内存浪费。


在nginx的server中加入对html文件和首页等的过滤规则以解决此问题,此规则判断首页和html、jpg、gif结尾的文件,如果结尾有?xxx,则抛出403错误,由error_page接收,并用302跳转到正确的地址。


location ~* (.html$)|(^/$)| (.jpg$)|(.gif$){

proxy_pass http://www.7jiejie.com;

if ($is_args)

{

return 403;

error_page 403 =200 $scheme://$host$uri;

}

}


这个方式也不是非常的完美,在测试中试图使用rewrite来达成目的,但rewrite之后会保留原来的$args即?的内容,所以不能成功。另外,如果url中有中文,则跳转是会失败,所以要保证url中不含有中文,包括url_encode的结果。


2、对静态内容发送POST请求


这种请求也会透过squid,但不会在squid缓存内容。


依葫芦画个瓢,以下配置可解决

location ~* (.html$)|(^/$)| (.jpg$)|(.gif$){

proxy_pass http://www.7jiejie.com;

if ($request_method = POST){

return 403;

error_page 403 =200 $scheme://$host$uri;

}

}