chencongms 发表于 2014-10-19 18:20

squid的access log里全都是TCP_REFRESH_HIT:FIRST_UP_PARENT

squid的access log里全都是TCP_REFRESH_HIT:FIRST_UP_PARENT,而不是TCP_HIT:NONE等。说明每次流量还是打到了后端的realserver上,请问是什么原因?
谢谢大家

woxizishen 发表于 2014-10-20 14:44

1.楼主先问问你整个公司代理服务器的架构,有没有做子父代理。就是如果你这台是子代理,那么通常的人一般都会把子代理的请求直接转发给父代理,你那个日志记录就是正确的,没撒好奇怪的。

2.如果没有,那就是你是不是在代理服务器上让某些用户或开发所有用户不用查询缓存记录,直接将请求转发到原始服务器上去啦。
always_direct

3.或者说你设定了不缓存某些URL。

4.最好发下日志记录看看,这样大家好根据你的问题解决。因为直接访问原始服务器除了配置设定造成外,有些web原始服务器内容,squid代理是缓存不了的,只能转发请求。

chencongms 发表于 2014-10-20 20:29

回复 2# woxizishen


    非常感谢版主的热情解答!我想请问一下如果是如下配置的话,那么非rpm和img后缀的文件是不是就会产生这样的日志TCP_REFRESH_HIT:FIRST_UP_PARENT?我从字面上理解log的意思是这些内容缓存住了,但是被认为是过期的,所以才会跑到realserver上找最新的,但是实际上realserver回给squid一个304,这说明缓存没有失效。简而言之,我觉得他打这样的log很歧义(因为非rpm和img后缀的文件我根本就不想缓存):

refresh_pattern -i \.rpm$        10080    100%   10080
refresh_pattern -i \.img$        10080    100%   10080
refresh_pattern .                 0           0%      0

ps:对refresh_pattern .                 0           0%      0 这句配置不是很理解,是前人传给我的,目的是只缓存rpm和img后缀的文件。

woxizishen 发表于 2014-10-21 09:26

本帖最后由 woxizishen 于 2014-10-21 09:49 编辑

我想请问一下如果是如下配置的话,那么非rpm和img后缀的文件是不是就会产生这样的日志TCP_REFRESH_HIT:FIRST_UP_PARENT
是的。



refresh_pattern 顾名思义就是缓存里的资料更新时间设置是按照从上往下顺序匹配,如果第一条匹配,就停止搜索,如果不匹配则继续
refresh_pattern .               0             0%         0         他的意思就是不符合上面那2条的,其他任何形式文件在任何时候都认为是过期的,当然就不会缓存了。

refresh_pattern参数含义
refresh_pattern [-i] regex min percent max
-i就是不区分大小写
regex 正则部分你应该知道那个.代表任意
第一个0 是min(分钟)
最后一个0 是max
percent是百分比。
官方说明
缓存对象缓存的时间小于refresh_pattern定义的min,该缓存不过期   这里定义了0。
而那个max是对缓存对象存活时间的最高限制,超过这个时间,无论过期不过期,强制刷新。 也是定义了0,这样话根本就不会去缓存任何资料。
提到那个percent,对于大多数想精确控制过期时候,很少用这个去控制。


squid默认的参数为
refresh_pattern .               0       20%   4320
这里规定是(4230分钟)72小时后缓存资料强制刷新,当缓存的时间大于min 0时候,这时候就会在这个最小时间和最大时间取那个百分比控制缓存过期。
只要小于min+(max-min)*20%,缓存就是不过期的。

(备注:以上所有的缓存时间是要根据refresh_pattern算法计算出来的)

chencongms 发表于 2014-10-23 14:31

回复 4# woxizishen


感谢!还想再请问一下,在我如下设置了以后:
cache_mem 10 GB
maximum_object_size 30 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 20 MB
如果数据满足以上要求是否真的被squid存在内存里,还是说数据其实是存在硬盘里的,内存里只是存储了一个关于这个数据的hash值

woxizishen 发表于 2014-10-27 08:22

回复 5# chencongms


cache_mem 10 GB      这里只是定义了squid使用内存的一方面大小。额外使用内存量建议设为物理内存的30-40%,设置过大容易造成宕机
实际squid使用内存大小和这个无关

maximum_object_size 30 MB   这个是定义硬盘最大cache最大单个文件大小,超过该值,将不存储,
和内存没关系

minimum_object_size 0 KB      这个是定义硬盘最小cache最小单个文件大小,低于该值,将不存储。这个用默认即可


maximum_object_size_in_memory 20 MB设定内存能够缓存最大单个文件的大小。预设为8kb。如果内存足够大,应该设定足够大提高性能。
这个和内存有关系


这样都解释了,你应该明白了吧
页: [1]
查看完整版本: squid的access log里全都是TCP_REFRESH_HIT:FIRST_UP_PARENT