需求:增加访问的命中率
可以直接命令yum -y install squid安装,
完事后,调整squid的配置文件/etc/squid/squid.conf
可参考下面的简单配置方式(源在同一台机器)
1 |
<pre class="wrap:true lang:default decode:true "> <p>http_port 3128 vhost #代理服务器使用的端口,使用80端口,就和传统的http服务器一样,用户基本不知道代理服务器的存在,不降低体验。vhost选项是开启虚拟机支持 </p> <p>visible_hostname test_cdn #给代理服务器指定一个名字,如果有多个代理服务器,方便统一管理维护 </p> <p>cache_mgr neican@139.com #代理服务器管理员邮箱,出错了方便用户联系你。</p> <p>error_directory /usr/share/squid/errors/Simplify_Chinese #中文错误语言文件 </p> <p>#http_access allow localhost #这个可以注视掉,因为要公开给所有人访问的代理服务器 </p> <p>http_access allow all #这个是开启全部访问权限,如果需要更高的权限配置,请参考官方文档,或者squid.conf里自带的英文说明 </p> <p>cache_peer 127.0.0.1 parent 80 0 default #这个是指定http服务器的设置,IP 和端口修改一下就行了。 </p> |
接下来初始化squid缓存目录
1 |
<pre class="wrap:true lang:default decode:true "> <p>cd /usr/sbin <br />./squid -z</p> |
如果输出Creating Swap Directories
就证明初始化成功
接下来调试模式下启动squid,这样做的好处是如果配置出错可以打印出错误信息方便调试
1 |
<pre class="wrap:true lang:default decode:true "> <p>./squid -Nd1</p> |
如果后台启动,可以./squid -s或者service squid start
ctrl+c退出调试模式并停止squid
如果没有错误信息说明启动成功
按这样的配置就可以开始测试访问了,在FireFox下访问www.youdomain.com:3128
使用firebug查看header响应头信息中是否包含
1 |
<pre class="wrap:true lang:default decode:true "> <p>X-Cache-Lookup HIT from test_cdn:3128</p> |
信息,如果有说明缓存已经命中,第一次会出现MISS from test_cdn:3128,这个属于正常线程,因为还没有缓存,刷新浏览器就可以看到hit信息
如果刷新以后还是Miss,有很多种情况需要说明了
1.静态页面,这个基本不用改,除非配置错误,否则肯定可以hit,当然也有不命中的情况。
2.动态页面,比如php,asp,jsp等等动态语言。需要手动在程序里面设置header头的Last-Modified和Expires,PHP中代码如下:
1 |
<pre class="wrap:true lang:default decode:true "> <p>$expire=180;//3分钟 <br />#header(“Pragma: public”); <br />#header(“Cache-Control: max-age=”.$expire); <br />header(“Expires: ” . gmdate(“D, d M Y H:i:s”,time()+$expire) . “GMT”); <br />header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”,time()) . “GMT”);</p> |
其中,Pragma和Cache-Control两个选项需要说明的是,如果你使用的一些开源框架,或者你自己写的框架之前设置过类似的header头信息,这里需要覆盖掉,或者删除先前的
如果Cache-Control是no-cache以及Pragma是private就算设置了Expires和Last-Modified也不会被squid缓存。