[squid-users] Squid reverse-proxy. How it decides when to refresh?

Amos Jeffries squid3 at treenet.co.nz
Fri Sep 1 13:46:31 UTC 2017


On 02/09/17 00:18, Alexander Lazarev wrote:
> Well. looks like squid using heuristics after all:
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(291) refreshCheck: 
> checking freshness of 'http://mydomain.zone/1.txt'
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(312) refreshCheck: 
> Matched '<none> 0 20%% 259200'
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(314) refreshCheck:       
> age:    65955
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(316) refreshCheck:       
> check_time:     Fri, 01 Sep 2017 11:49:12 GMT
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(318) refreshCheck:       
> entry->timestamp:       Thu, 31 Aug 2017 17:29:57 GMT
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(179) refreshStaleness: No 
> explicit expiry given, using heuristics to determine freshness
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(198) refreshStaleness: 
> Last modified 5524975 sec before we cached it, L-M factor 20.00% = 
> 1104995 sec freshness lifetime
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(205) refreshStaleness: 
> FRESH: age 65955 <= stale_age 1104995
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(338) refreshCheck: 
> Staleness = -1
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(461) refreshCheck: Object 
> isn't stale..
> 2017/09/01 14:49:12.296 kid2| 22,3| refresh.cc(470) refreshCheck: 
> returning FRESH_LMFACTOR_RULE
> 
> It's a shame there's no warning header, like 
> "https://tools.ietf.org/html/rfc7234#section-5.5.4" suggests.

There should be when that cached response becomes 24 hrs old. That log 
says Squid only received the object ~18 hrs ago, so the cached 
*response* has not been around for 24hrs yet even though the *content* 
it refers to on the server is older.

Content on a server being old is no particular cause for alarm if it 
gets cached a few seconds/hrs/mins on a proxy.

Though note that Warning headers about heuristics being used are an 
OPTIONAL, so it is also not a problem if they are absent.

> Guess, I need to set refresh_pattern's max option to minimal value.
> 

Any particular reason you are worried about all this?

Heuristic freshness is normal and usually perfectly fine. A proxy making 
heuristic decisions is only a problem if it is ignoring server or client 
instructions about the content cacheability. Also, a reverse-proxy as an 
agent of the server effectively has permission to ignore things the 
client wants - though it is usually a good idea to do a background 
revalidation if the client insists strongly on new content (eg. 
reload-into-ims option), because that tends to mean there is some 
problem with what it got earlier [maybe whats in the cache].


> On Thu, Aug 31, 2017 at 8:26 PM, Alexander Lazarev wrote:
> 
>     Thank you for reply!
>     I still don't understand what's happening.
>     I create file 1.txt with a little bit of text data. Request it with
>     curl. Web-server returns it without any cache related headers to
>     squid, squid returns it to me. Getting it with curl one more time,
>     squid serves it straight from cache without validation(no entries in
>     log on origin server).
>     I create one more file 2.txt with some data. Do same things, same
>     headers in response. Second response from squid is from cache but
>     validated from origin server(i see 304 in origin server logs).
>     What could be wrong?

Nothing wrong. Both sequences are valid and normal. The difference could 
just be a timing variation as small as a nanosecond in what operations 
are performed relative to each other - with heuristics based on 0.2 of a 
recently created objects age HTTP's 1 second in timing resolution is 
both very course and very sensitive to rounding limits.

Amos


More information about the squid-users mailing list