cache all headers_head标签的作用

cache all headers_head标签的作用refresh_pattern指令如下:看论坛有人出现一个问题,就是当Expires设置为60秒以内时都不会Cache,但当设置成61秒时就能Cache

cache all headers_head标签的作用refresh_pattern指令如下:



看论坛有人出现一个问题,就是当 Expires 设置为 60 秒以内时都不会 Cache ,但当设置成 61 秒时就能 Cache。

其实这不是个问题,在 Squid 中有这样一行配置 minimum_expiry_time 默认值是 60 。所以只需要修改这个值.就能实现 60 秒以内 Cache 了.

注意了,这个参数不要修改的过小,这个对时间的校准很严格的,设置太小,你传送过程中就花了 2 秒,你设置刚好 2 秒,过来就过期了,就样就没有用了。所以建议直接放在本地 cache 的前端,才设置小的时间。

这个参数主要目的也是上面写的,防止 cache 失效,然后不断 cache 的循环。

refresh_pattern [-i] regex min percent max [options]


* percent与Min、Max两个值是完全没有关系




先理解什么情况下响应过期:




1.缓冲对象在squid的cache缓冲的时间大于refresh_pattern定义的max ,该响应过期;


2.缓冲对象在squid的cache缓冲的时间大于(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-
Modified时间)*percent,该响应过期;

override-expire


该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期。




override-lastmod


改选项导致squid在检查LM-factor百分比之前先检查min值。




reload-into-ims


这个参数不是refresh_pattern中的参数,他是一个单独的参数.


在flashget和迅雷之类的软件,下载时发送http header时会包含下列信息:


Cache-Control:no-cache


Pragma:no-cache




这样的话squid主机接受这http header以后会让squid服务器直接连接web server取新的数据。这样对服务器很大的压力,


reload-into-ims参数的意思是将client请求的no-cache或reload请求转变成If-Modified-Since,而If-Modified-Since这个参数是用于判断文件是否被modified,这时squid和RS之间的数据传输仅仅只是验证文件是否更新或更改,如果RS返回的是文件未被更改,则直接由squid的cache文件返回给client,如果更改了,再到后端RS获取最新的文件并被squid缓存,这样做可以节省带宽,增加访问速度。


这个参数违反 HTTP 协议,但是对大部分网站来说是可以设置为 on 的,只要后端服务器对If-Modified-Since 头的判断正确即可。




大概意思是:只在源服务器上文件变动的情况下才实际更新cache当中的内容。




ignore-reload




1.不能通过 % squidclient -r 
http://www.lrrr.org/junk
 >/tmp/foo来强迫缓存响应更新


2.忽略浏览器的刷新操作(刷新操作会强迫squid调用新页面)


3.该选项导致squid忽略请求里的任何no-cache指令,会强行缓存.除非正常从squid过期(希望页面一进入cache就不删除,直到被主动purge掉为止)




ignore-no-cache




该选项处理http头部信息:




Pragma: no-cache




Cache-control: no-cache



ignore-no-store ignore-ridate




以上两个选项是为了处理http头部信息:




Cache-Control: no-store, must-ridate


Cache-Control: no-cache, must-ridate






ignore-no-cache ignore-private




处理http头部信息:Cache-Control: no-cache, must-ridate 
Pragma: no-cache




这两行是控制浏览器的缓存行为的,指示浏览器不得缓存




以上两个参数就是为了处理动态文件不能被缓存的问题.




eg:




refresh_pattern   -i \.jpg$      180    90%    1440   reload-into-ims ignore-no-cache






refresh_pattern   -i 
http://xxx/jobs_nv/ajax_keywords.asp
  1440 50% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private




第一个例子是缓存jpg,第二个例子是缓存动态文件asp




ignore-reload和reload-into-ims的区别:




ignore-reload 会强行缓存,对no-cache当没有见到,但使用  reload-into-ims,当有no-cache的请求发过来时,他会发一个http头部回去问源服务器(上层服务器),是否有修改,如果修改就更新,如果没有就返回给客户.




regexp参数是大小写敏感的正则表达式。你可以使用-i选项来使它们大小写不敏感。squid按顺序来检查refresh_pattern行;当正则表达式之一匹配URI时,它停止搜索。




理解squid检查不同值的顺序非常重要。如下是squid的refresh_pattern算法的简单描述:




假如响应年龄超过refresh_pattern的max值,该响应过期;




假如LM-factor少于refresh_pattern百分比值,该响应存活;




假如响应年龄少于refresh_pattern的min值,该响应存活;




其他情况下,响应过期。




在squid.conf.default里面,refresh_pattern参数下面的注释是这样的:


  TAG: refresh_pattern


       usage: refresh_pattern [-i] regex min percent max [options]


       Basically a cached object is:


               FRESH if expires < now, else STALE


               STALE if age > max


               FRESH if lm-factor < percent, else STALE


               FRESH if age < min


               else STALE


以上所有的时间都是以分钟为单位计算。




·         refresh_pattern指出的缓冲对象过期了,这个对象过期。




·         refresh_pattern指出的缓冲对象在squid的cache缓冲的时间大于max的话,这个对象过期。




·         refresh_pattern指出的缓冲对象的lm-factor大于等于percent的话,这个对象过期。




·         refresh_pattern指出的缓冲对象在squid的cache缓冲的时间小于min的话,这个对象不过期。




可是,这个lm-factor到底是怎么算的?有什么具体意义? look下面的图:




上面这张图来自于《Squid.Definitive.Guide》第七章,对squid的LM-factor算法作出了一个很直观的描述。




请注意这张图的起始时间坐标:Last-Modified,这个是由squid读取的原始web数据所规定的。


然后就是Date,这个是原始数据进入squid的缓冲的时间。


最后就是Expires,这个就是原始数据在squid中的缓冲过期时间。


可以很容易的得出结论,对于LM-factor算法来说,原始数据在squid中的缓冲时间为


(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)*percent


所以,我们可以郑重得出结论,在squid的refresh_pattern设置中,percent与Min、Max两个值是完全没有关系!


最后总结一下,对于squid来说,缓冲的数据在cache中的存活时间是这样决定的:




如果有定义refresh_pattern:只要满足以下两个条件之一,缓冲对象过期




缓冲对象在squid的cache缓冲的时间大于refresh_pattern定义的max




缓冲对象在squid的cache缓冲的时间大于(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)*percent




如果符合多个refresh_pattern定义,以第一条符合定义的refresh_pattern为准




如果没有符合定义的refresh_pattern,则按squid的默认处理规则 




Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:




Last-Modified: 告诉反向代理页面什么时间被修改 


Expires: 告诉反向代理页面什么时间应该从缓冲区中删除 


Cache-Control: 告诉反向代理页面是否应该被缓冲 


Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-cache 




例如:
http://bbs.linuxtone.org/viewthread.php?tid=138




refresh_pattern 20%




假设源服务器上www.aaa.com/index.htm —–lastmodified 是 2007-04-10 02:00:00


squid上 proxy.aaa.com/index.htm index.htm进入cache的时间 2007-04-10 03:00:00




1)如果当前时间 2007-04-10 03:00:00 也就是说squid刚刚缓存上


源年龄  =3点-2点=60分钟  对象进入cache的时间 – 页面自身修改时间


响应年龄 =0分钟           当前时间- 对象进入cache的时间


index.htm还可以在cache停留的时间(源年龄)*20%=12分钟


也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。




2)如果当前时间 2007-04-10 03:05:00  也就是说squid已缓存了5分钟


源年龄  =3点-2点=60分钟


响应年龄 =5分钟


index.htm还可以在cache停留的时间(源年龄 )* 20% – 响应年龄 = 12分钟-5分钟=7分钟


LM-factor=响应年龄/源年龄=5/60=8.3%<20%




一直到2007-04-10 03:12:00 LM-factor=12/60=20% 之后,cache中的页面index.htm终于stale。


如果这时没有index.htm的请求,index.htm会一直在缓存中,如果有index.htm请求,squid收到该请求后,由于已经过期, squid会向源服务器发一个index.htm是否有改变的请求,源服务器收到后,如果index.htm没有更新,squid就不用更新缓存,直接把缓存的内容放回给客户端,同时,重置对象进入cache的时间为与源服务器确认的时间,比如2007-04-10 03:13:00,如果正好在这个后重新确认了页面。重置后,resource age变长,相应在cache中存活的时间也变长。




如果有改变则把最新的index.htm返回给squid,squid收到会更新缓存,然后把新的index.htm返回给客户端,同时根据新页面中的Last_Modified和取页面的时间,重新计算resource age,进一步计算出存活时间。




实际上,一个页面进入cache后,他的存活时间就确定了,即 (resource age) * 百分比,一直到被重新确认。



Squid 
配置文件详解

# NETWORK OPTIONS

(网络选项)

# —————————————————————————–
http_port 3128  #
代理端口

icp_port 3130   #icp

端口

# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
#—————————————————————————–
#
禁止缓存

hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
no_cache deny QUERY
no_cache deny denyssl
#
上面几个就是说遇到
URL
中有包含
cgi-bin
和以
https:\\
开头的都不要缓存,

#asp


cgi

php
等动态脚本也不要缓存,

#https://

开通的不缓存是因为一般我们进行电子商务交易,

#

例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。

# OPTIONS WHICH AFFECT THE CACHE SIZE(

定义
cache
大小的选项
)
# —————————————————————————–
cache_mem 32 MB       #
额外使用内存量,可根据你的系统内存在设定,一般为实际内存的
1/3
cache_swap_low  70    #
最低缓存百分比

cache_swap_high 95   #

最高缓存百分比,就是上面那个额外内存的使用百分比
maximum_object_size 4096 KB  #
单个文件最大缓存大小,超过这个大小将不缓存
maximum_object_size_in_memory 8 KB  #
在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中
#

DNS
正反解所得到的
IP
存在缓存区的大小,这样可以加快解析速度

ipcache_size 1024
ipcache_low 90
ipcache_high 95
fqdncache_size 1024
# LOGFILE PATHNAMES AND CACHE DIRECTORIES(
定义日志文件的路径及
cache
的目录)

# —————————————————————————–

各发行版自带的
Squid
略有区别,一般使用各发行版自带的设置

#

  
<cache_dir>; <aufs|ufs>; <
目录所在
>; <MBytes
大小
>; <dir1>; <dir2>; 
#

  那个
 aufs 
只有在编译的时候加入
 –enable-async-io 
那个选项才有支持,
 
#

  至于目录所在地与所占用的磁盘大小则请视您的主机情况而定,
 
#

  而后面
 dir1, dir2 
则是两个次目录的大小,通常
 16 256 

 64 64 
皆可,
 
#

  一般来说,数字最好是
 16 
的倍数,据说性能会比较好啦!
cache_dir aufs /Cache1 100 16 256  
cache_dir aufs /Cache2 100 16 256
#
日志存放位置

#cache_access_log /usr/local/squid/var/logs/access.log
#cache_log /usr/local/squid/var/logs/cache.log
#  TAG: cache_store_log
#cache_store_log /usr/local/squid/var/logs/store.log
#  TAG: pid_filename
#pid_filename /usr/local/squid/var/logs/squid.pid
# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(
外部支持程序选项)

# —————————————————————————–
#
用代理登陆匿名
ftp
服务选项


各发行版自带的
Squid
略有区别,一般使用各发行版自带的设置

#  TAG: ftp_user
ftp_user Squid@    #

用户名

ftp_passive on     #

被动模式

#

认证

#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
#auth_param basic casesensitive off
 
# OPTIONS FOR TUNING THE CACHE
(调整
cache
的选项)

# —————————————————————————–

#  TAG: refresh_pattern    Cache

更新时间设置

#<refresh_pattern>; <regex>; <

最小时间
>; <
百分比
>; <
最大时间
>;
refresh_pattern ^ftp:           1440        20%        10080
refresh_pattern ^gopher:        1440        0%        1440
refresh_pattern .                0        20%        4320
#
上面第一行如果网址开头是
 ftp 
的话,那么在一天
(1440
分钟
)
后,

#

如果
proxy 
再次取用这个档案时,则
 cache 
内的数据会被更新!
 
# TIMEOUTS 
(超时)

# —————————————————————————–
#

连接到其他机器的最大尝试时间

connect_timeout 1 minute
#
连接到上层代理的超时时间

peer_connect_timeout 30 seconds
#
返回超时

request_timeout 2 minutes
#
持续连接时间

persistent_request_timeout 1 minute
# ACCESS CONTROLS
(访问控制)

# —————————————————————————–
#  TAG: acl
#Examples:
#acl myexample dst_as 1241
#acl password proxy_auth REQUIRED
#acl fileupload req_mime_type -i ^multipart/form-data$
#acl javascript rep_mime_type -i ^application/x-javascript$
#
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80                # http
acl Safe_ports port 21                # ftp
acl Safe_ports port 443 563        # https, snews
acl Safe_ports port 70                # gopher
acl Safe_ports port 210                # wais
acl Safe_ports port 1025-65535        # unregistered ports
acl Safe_ports port 280                # http-mgmt
acl Safe_ports port 488                # gss-http
acl Safe_ports port 591                # filemaker
acl Safe_ports port 777                # multiling http
acl CONNECT method CONNECT
acl msn url_regex -i ^[url]http://gateway.messenger.hotmail.com[/url]

acl inside1 src 192.168.1.0/24   #

内部网
IP


acl inside2 src 192.168.2.0/24 
acl localmac arp “/usr/local/squid/localmac”  #mac

地址文件
#  TAG: http_access
http_access allow inside1  #

允许
inside1
规则通过

http_access allow inside2  #

允许
inside2
规则通过

http_access allow localmac  #

允许
localmac
里面有登记的
mac
地址通过

http_access allow msn  #

允许访问
[url]http://gateway.messenger.hotmail.com[/url]
acl admin arp 00:40:05:13:C4:B2 
http_access allow admin  #

允许
00:40:05:13:C4:B2
这个
mac
地址
#
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost #

允许
manager
访问
localhost
http_access deny manager            #

禁止
manager
访问

# Deny requests to unknown ports
http_access deny !Safe_ports        #

禁止访问不在
Safe_ports
里的端口

# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports #

禁止访问非
443

563
端口

#
acl banned_sites url_regex “/etc/squid/banned.list”  
acl worktime time MTWHF 8:30-12:00 14:00-18:00 
acl mmxfile urlpath_regex -i \.mp3$ \.avi$ \.rmvb$ \.rm$ \.wma$ \.wmv$ 
http_access deny worktime mmxfile #

禁止在
worktime
时间内访问
.mp3,.avi,.rmvb,.rm,.wma
文件

http_access deny worktime banned_sites  #banned.list

文件里的网址全部丢弃

http_access allow localhost             #localhost

可以访问
#——
按照网段,限制连接数

acl loc1 src 192.168.1.0/24           
acl loc1_conn maxconn 50 
acl loc2 src 192.168.2.0/24 
acl loc2_conn maxconn 30
http_access deny loc1 loc1_conn        
http_access allow loc1 
http_access deny loc2 src loc2_conn 
http_access allow loc2 
#—————————–
http_access allow localhost     #localhost
可以访问

http_access deny all            #

丢弃其他

# HTTPD-ACCELERATOR OPTIONS


HTTPD
加速选项)

# —————————————————————————–
#

设定透明代理

httpd_accel_host virtual #

主机名

httpd_accel_port 80      #

透明代理端口

httpd_accel_with_proxy on 
httpd_accel_uses_host_header on

今天的文章cache all headers_head标签的作用分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/74367.html

(0)
编程小号编程小号

相关推荐

发表回复

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