行使Squid做代理服务器,静态页面还比较简单,但动态页面则并从未那么不难了。尤其现在超越八分之四网页都以动态页面,启使人陶醉士在架设Squid的时候须求对那方面包车型客车布置留神。上边概述一下Squid对动态页面实行cache的时候需求思虑的方面。

Refresh_pattern
指令直接的主宰磁盘缓存。宽松的装置扩张了cache的命中率,同样也加码了客户接受过时相应的可能率;
保守的安装,裁减了cache的命中率和过时响应
 Refresh_pattern
准绳仅仅使用到未有鲜明过时代限响应。原始服务器能使用Expires
底部,恐怕利用Cache-Control:max-age指令来安装过时代限,当然在squid主配置文件中配备refresh_pattern
配置任意数量,squid是安分守己顺序实行搜寻以极度正则表明式,。一旦squid找到三个格外时,squid会利用相应的值来决定,有个别缓存响应是存活如故过期,当正则表明式之一被相称U昂CoraI时,squid
就能够终止搜索

做squid测量检验时翻看squid日志音信如下:

codecache代码缓存区,主要寄存在JIT所编写翻译的代码,同期还会有Java所选用的当地点法代码也会蕴藏在codecache中.不一样的jvm、分裂的启航情势codecache的暗许值大小也不尽同样。

当WML页面下载到WAP设备后,它将保留在WAP设备内部存款和储蓄器中一段时间,直到这些日子过期。在那未来,页面将从服务器下载,并不是从WAP设备的缓存读取。这几个进程被称做Cache。
可是多少时候不想让页面从缓存中读取,而是从劳动器端读取。三个规范的例证正是当服务器的源委不断在更新的时候,通过在HTTP头中参与势必的cache音讯,来报告WAP设备该页面将不存款和储蓄在缓存中。
能够在劳动器端生成HTTP头,大概利用PHP、ASP、Perl只怕别的服务端开荒语言。这一行不可能被回顾在页面里,既然是HTTP的音讯头,就不是WML元素。
对此静态页面,可能从未行使劳务器端脚本语言,大多浏览器支持META标签来支配浏览器的Cache。看本部分的末段的事例。
将上边代码参预到HTTP头中,页面将立时过期:
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: DD. month YYYY HH:MM:SS GMT
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
先是行告诉微型浏览器,页面已经过期一段时间了。第二行告诉浏览器页面最终贰回修改的时刻。DD应该换到当天的日期,month
YY HH MM
SS等等类推。第三行和第四行有同一的职能。告诉浏览器页面不被Cache(第三行适用于
HTTP 1.1,第四行适用于HTTP 1.0)。
下边包车型大巴是PHP的贰个事例:
<?
// set the correct MIME type
     header(“Content-type: text/vnd.wap.wml”);
// expires in the past
     header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
// Last modified, right now
     header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ”
GMT”); 
// Prevent caching, HTTP/1.1
     header(“Cache-Control: no-cache, must-revalidate”);
// Prevent caching, HTTP/1.0
     header(“Pragma: no-cache”);
   ?>
下边是选拔WebClasses(VB)的事例。使用”Response.Expires=-1″,防止Cache。
 Private Sub WebClass_Start()
      ‘Set correct MIME type
      Response.ContentType = “text/vnd.wap.wml”
     
      ‘Make sure no caching
      Response.Expires = -1
      Response.AddHeader “Pragma”, “no-cache”
      Response.AddHeader “Cache-Control”, “no-cache,
must-revalidate”

1 被cache的页面必需对富有客户体现的剧情都以一律的。

 Refresh_pattern 的语法

192.168.9.52 – – [13/Dec/2011:10:25:30] “GET
HTTP/1.1” 404 575 “-” “Mozilla/5.0
(Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko)
Chrome/15.0.874.120 Safari/535.2” TCP_NEGATIVE_HIT:NONE

JVM 版本和启动方式

默认 codeCache大小

32-bit client, Java 8

32 MB

32-bit server, Java 8*

48M

32-bit server with Tiered Compilation, Java 8

240 MB

64-bit server, Java 8*

48M

64-bit server with Tiered Compilation, Java 8

240 MB

32-bit client, Java 7

32 MB

32-bit server, Java 7

48 MB

32-bit server with Tiered Compilation, Java 7

96 MB

64-bit server, Java 7

48 MB

64-bit server with Tiered Compilation, Java 7

96 MB

即使同三个U锐界L包涵参数)对区别顾客若是展现差别的内容,那么cache它会使局地客商观察其余客商本事看出的剧情。

 Refresh _pattern [-i] regexp min  percent  max  [Option]

TCP_NEGATIVE_HIT:NONE,呈现页面被HIT了,检查后发觉在源站下menu.gif在images目录下,访问url错误引起的,可是为何squid会缓存住404的页面吗,最后才驾驭原本是negative_ttl那个参数引起的,暗中认可squid会缓存住错误页面5分钟.

*
jdk第88中学server情势默许使用分段编写翻译格局,假诺急需关闭分层编译,需求增添运维参数-XX:-TieredCompilation

本身先是步缓存的是访谈量最大的阅读帖子的页面,不过页面上本来有非常复杂的权位推断,针对这种气象,思考到相当多音信在长期内基本是生成十分小的,只能将用户基本音信写入cookie,使用前端的js来支配。纵然这么会招致限制不严俊现象,不过因为终归不是经济贸易使用,这一个损失和性质比较仍旧得以承受的)

   一 regexp 参数是深浅写敏感的正则表明式,- i 选项是忽视大小写,

negative_ttl参数调控这么些不当被cache的时光数额。下列HTTP状态也许变成squid响应缓存:204,400,
403, 404,  500, 501, 502, 503, 504等。

 

2 被cache的动态页面不可能运营四个session。

   二  min
参数是分钟数量,它是老式响应的最低是时刻限定。假如鬼怪响应驻留在cache里的年华不雷纳Dini奥越这些最低限制,那么它不会晚点。一样max
参数是现成响应的万丈时日限定。假使有个别响应驻留在cache里的小时大于那个最高限制,那么它必得被刷新
   三  在min 和max
时间范围之间的响应,汇合前遇到squid的末段修改系统LM-factor算法LM-factor=(responseb
age)/(resource age).
对这么的响应,squid总计响应的年纪和末段修改周到,然后将它当做百分比率进行相比,响应年龄大致地便是从原始服务器发生,只怕是终极一次验证响应后,经历的光阴数额。源年龄在Last-Modified
和Date底部之间是差异的,LM-factor
是响应年龄与源年龄的比率。那不是贰个准儿调整过期的参数,假如要精确调节过期,就不用使用该参数

negative_ttl 0 second就可以缓和此难题.

连锁参数

因为一般session都是用cookie完成,运维三个session意味着服务器会发送叁个Set-Cookie的HTTP头,squid把那样的页面cache之后,会产生全体继续的拜谒顾客都在自身的浏览器里设置同一的cookie,那会招致深重的结果。全部安装cookie操作的页面都有此类难点,即便不是启用一个session。所以,那类页面是相对不可能cache的。不过对包涵在三个已运维的session里的页面进行cache则不会有这么些标题。

   四   squid的refresh_pattern 算法的归纳描述

图片 1

-XX:ReservedCodeCacheSize设置codeCache的size大小,-XX:+UseCodeCacheFlushing启用code
cache的回收机制。

本人基本上并未有选拔session,set-cookie服务器端的)在急需缓存的这几个页面也远非,唯有二个为了合营广告活动扩充的用js来set-
cookie,所以也未曾难点)

       1   倘使响应年龄当先refresh_pattern 的max值,该响应过期;

由于JIT是随着代码被调用的次数高达CompileThreshold之后进展的,由此,codecache使用也会随之大增,常见的难点不怕,随着岁月的推移应用占用CPU会跟着增加,央求相应变慢等题材,这时就需求怀想codecache的难点了。

3
客商的拜访频度必需远远超越页面内容的创新频度,不然cache的意思非常小。

       2  如果LM-factor 少于refresh_pattern 的percent的值。该响应存活

 

这些页面天天的pv超越100万,所以如故想当有至关重要的 )

       3  假若响应年龄少于refresh_pattern 的min值,该响应存活

连锁优化请参见:

除此以外,cache动态页面未来,由于squid会拦截客户的央求,应用程序服务器收不到被拦住的央求,必需确定保证那不会默转潜移使用的管理逻辑。

       4  别的景况,响应过期

运用squid来cache动态页面有三种办法,一种是在页面里动态变化多少个HTTP头:当中贰个是Last-Modified,这些头表示页面上次涂改的年华,一般访谈静态页面时,apache会依照静态文件的贰个上次涂改时戳来设置那么些特性。

  五  Refresh_pattern  percent 总结方法
      Resource age=对象踏向cache的日子 – 对象的last_modified

(大家利用了那么些last-modifyed
头来拓宽,然后在文书会爆发变化时通报squid那样能够巩固squid的缓存命中率)

      Response age= 当前时刻 – 对象进入cache的时间

另多少个是Expires也许Cache-Control。Expires代表页面就要该时间今后过期,squid会从后端的应用服务珍视新获得页面。Cache-Control则经过三个max-age属性来告诉squid和浏览器那么些页面从Last-Modified起先的生活时间。Expires和Cache-Control只设置四个就能够。

      LM-factor   =(response age)/(resource age )

Last-Modified和Expires的光阴格式是,Wed, 14 May 二零零二 13:06:17
红霉素T。注意生成那一个时间时必然要转变来卡那霉素T时间,那样本事使互连网的天下客商都能正确识别。max-age的年月是两个整数,单位是秒。详细的文书档案请参照他事他说加以考察安德拉FC2616。那多少个HTTP头必须在装有页面内容输出以前开展设置,不然应用程序会报错。

例如 refresh_pattern 20%

php的事譬喻下:

    借使源服务器上www.linuxidc.com/index.html – –lastmodified
是二零零五-04-10 02:00:00

# Last-Modified时间设置为当前时间
header("Last-Modified: " . gmdate("D, d M Y H:i:s" . " GMT";
# Expires时间设置为1小时后
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 3600) . " GMT";

         Squid 上的proxy.aaa.com/index.html 
index.html存入cache的时间2007-04-10 03:00:00
   1  若是当今天子 二零零六-04-10 03:00:00

第三种cache方式是使squid强制cache某个钦赐的页面,而不管页面中是不是有前方提到的那多少个HTTP头。相应的布置参数比方如下:

      Resource age =3点 – 2点 =60分钟
      Response age =0 分钟
      Index.html 还是能在cache 中停留的岁月(resource age)*三分一= 12
分钟,换句话说,    index.html
走入cache后,能够停留十二分钟,才被另行载入
    2  只要当明天子是 2006-04-10 03:05:00
      Resource age =3点 – 2点 =60 分钟
      Response age=5 分钟
      Index.html 还足以在cache中滞留的年月
     ( resource age)*20%=12 分钟-5=7分钟
      LM-factor=5/60 =8.3% <20%
    3  全数说二〇〇五-04-10 03:12:00 LM-factor=12/60=五分之三之后,cache中的页面index.html
终于stale,纵然这段时日尚未index.html的恳求,index.html会直接缓存中,假若有index.html
央浼,squid收到乞求后,由于已经晚点,squid
会像源服务器发一个index.html是或不是有转移的呼吁,借使源服务器收到伏乞后,要是index.html未有创新,squid就不要缓存,直接会把缓存中的内容给客商端;同一时间,重新载入参数对象进入cache的时日为源服务器确认的日子。比方2005-04-10
03:13:00 ,假设刚幸而那几个后再行确认了页面。重新载入参数后,resource age
变长,相应在cache中的cache中存活的时光也大同小异变长

#下面两行表示凡是带参数含有?)的URL就不cache,必须注释掉。
#acl QUERY urlpath_regex cgi-bin \?
#no_cache deny QUERY
#下面两行创建一个acl,它匹配两个jsp页面
acl CACHABLE_PAGES urlpath_regex ^/topic/readSub\.jsp
acl CACHABLE_PAGES urlpath_regex ^/topic/listFrame\.jsp
#下面一个acl匹配所有的动态页面
acl NONE_CACHABLE_PAGES urlpath_regex \? \.jsp
#允许cache两个jsp页面
no_cache allow CACHABLE_PAGES
#禁止cache其它的jsp页面
no_cache deny NONE_CACHABLE_PAGES
#下面几行设置页面cache的时长,第一行cache一天,第二行cache两分钟
refresh_pattern ^http://post.mop.com/topic/readSub\.jsp 1440 0% 1440 ignore-reload
refresh_pattern ^http://post.mop.com/topic/listFrame\.jsp 2 0% 2 ignore-reload

   假若有变动则把新型的index.html返还给squid ,而squid
收到会更新缓存,然后把新的index.html
返还给顾客端,同反常候依赖新页面中的Last_Modified
和取页面包车型大巴胎元,重新总括resource age,一样也再一次总结存活时间
    实际上,一个对象步入cache后,一样他的存活时间就鲜明了,即(resource
age)* percent ,直到被再度确认
六  refresh_pattern 指令
   1 Override-expire

对于突显帖子内容的页面,当客户回复之后,帖子内容就改造了,为了实时刷新页面,能够在客商改动帖子内容之后,展开贰个tcp连接到squid,发送三个PU奥迪Q3GE指令,就能够将点名的U景逸SUVL过期,squid会重新到服务器上抓最新页面。

 该项导致squid在检查Ecpires 底部在此以前,先检查min
值,这样。一个非零的min时间让squid重临一个未承认的cache命中,及时该响应企图过期
  2 Override-lastmod

对应页面中必要追加:

该选取导致squid在自己讨论LM-factor 百分比以前先反省min值,其收效在expire
之后
  3 Reload-into-ims

Date last_modified_time = s.getLastReplyTime();
String modifySince=request.getHeader("If-Modified-Since";
SimpleDateFormat tempSdf=new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z",new java.util.Locale("en");
try{
Date modifySinceDate=tempSdf.parse(modifySince);
if (!modifySinceDate.before(last_modified_time)){
response.sendError(HttpServletResponse.SC_NOT_MODIFIED);
return;
}
}catch (Exception e){
out.println("";
}
long last_modified = last_modified_time.getTime();
response.setDateHeader("Last-Modified",last_modified);

 该项让squid在确认央求里,以no-cache指令传送贰个伸手,话句话说,squid在转账呼吁前,对该诉求扩充一个If-Modified-Since
尾部,首要该点的是,仅仅在指标有Last-Modified
时间截时技术做事。外面步向的诉求保留no-cache
指令,以便她达到原始服务器。一般景况下得以使用reload-into-ims。它是野蛮调控指标的过期时间,那违反了http合同的动感,可是也在带宽较窄的情状下。可以显然的增高系统的响应时间
                 如
               refresh_pattern -i \.css$ 1440 50% 129600
reload-into-ims

—————————————————————————————-

               refresh_pattern -i \.xml$ 1440 50% 129600
reload-into-ims

入眼cache命中率等音讯,能够用如下命令:

              refresh_pattern -i \.html$ 1440 90% 129600
reload-into-ims

/data/squid/bin/squidclient -p 80 cache_object://localhost/info

              refresh_pattern -i \.shtml$ 1440 90% 129600
reload-into-ims

里头的如下音信比较根本:

              refresh_pattern -i \.hml$ 1440 90% 129600
reload-into-ims

Cache information for squid:
Request Hit Ratios: 5min: 41.5%, 60min: 40.1%
Byte Hit Ratios: 5min: 52.3%, 60min: 50.8%
Request Memory Hit Ratios: 5min: 27.7%, 60min: 30.7%
Request Disk Hit Ratios: 5min: 38.3%, 60min: 39.2%
Storage Swap size: 1886720 KB
Storage Mem size: 39452 KB
Mean Object Size: 50.85 KB
Requests given to unlinkd: 1685

              refresh_pattern -i \.jpg$ 1440 90% 129600
reload-into-ims

参考:

              refresh_pattern -i \.png$ 1440 90% 129600
reload-into-ims

              refresh_pattern -i \.bmp$ 1440 90% 129600
reload-into-ims

              refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims

  4 Ignore-reload

   该选取导致squid的忽视央求里的其他no-cache指令
 假若愿意内容要是步向cache就不删除,除非是被主动purge掉甘休,能够加多ignore-reload
选项,该项常用在DVD,wma,wmv,gif 之类

 refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload

 
 5 Ignore-no-cache

    
该项导致squid强制忽略从源站而来的“Pragma:no-cache”和“cache-control:no-cache”
 6 Ignore-private

     该项导致squid强制忽略从源站而来的“cache-control:private”
 7 Ignore-auth

     该项导致squid
强制将贰个伸手感到是源站发送的蕴藏“cache-control:public”
 8 Ignore-no-store

    该指令是忽视来自源站不缓存对象
     a no-store directive from the Web server which makes an object
non-cacheable is ignored. 

 9 Refresh-ims

     该项是client叁个刷新央浼调换来叁个If-Modified-Since 哀告

       a refresh request from a client is converted into an
If-Modified-Since request.

图片 2

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图