Not seeing a successful purge

Laurence Rowe l at lrowe.co.uk
Sat Feb 13 23:43:55 CET 2010


Given your backend is issuing a Vary header, I would just remove your
vcl_hash customisation and instead add a little header normalisation
to vcl_recv. We use the snippet from
http://varnish-cache.org/wiki/FAQ/Compression with success. You'll
still have to issue two PURGE requests, one with the gzip in the
Accept Encoding and one without.

Laurence


2010/2/12 John Norman <john at 7fff.com>:
> I think it's the backend's (Apache/Passenger) header:
>
>    Vary: Accept-Encoding,User-Agent
>
> Which seems to prevent (???) this from working in my vcl_hash:
>
>  if (req.http.Accept-Encoding ~ "gzip") {
>    set req.hash += "gzip";
>  } // etc
>
> The Varnish doc says: "But by default, Varnish will perform no
> transforms on the headers singled out by Vary: for comparison"
> (http://varnish-cache.org/wiki/ArchitectureVary).
>
> So . . . I'm not sure what I should do. If the backend says "Vary" for
> Accept-Encoding, does that mean that I should or should not be able to
> access that header for the purposes of setting the hash?
>
> What I am observing is:
>
> browser makes request with Accept-Encoding: gzip,deflate
>
> When I try to purge, the request with the purge says: Accept-Encoding:
> gzip,identity
>
> Even though "gzip" is in the request for both the browser
> Accept-Encoding, and for the purge, they seem to be getting hashed
> differently.
>
> If when I do a purge, I force Accept-Encoding: gzip,deflate, then it
> matches what the browser did exactly, and I am able to purge
> successfully.
>
> On Fri, Feb 12, 2010 at 11:54 AM, John Norman <john at 7fff.com> wrote:
>> Here's a bit more on my "purge" problem -- a comparison of a purge
>> that works on my development machine, vs. one that doesn't work on my
>> staging system.
>>
>> On both, the browser request goes to haproxy, then to varnish. The VCL
>> is identical, as quoted in a prior e-mail. The backends are different:
>> on my local, it's the Ruby webrick server; on staging, it's
>> Apache+Passenger.
>>
>> Again, I'm not purging through varnishadm: This is using the
>> pseudo-http-method PURGE.
>>
>> One thing I can say about the staging environment if that if I do a
>> non-browser request using mechanize from the staging system itself,
>> then the later purge DOES work. In that case, the two differences are:
>> The user-agent is the same for both the get and the purge; and
>> requesting IP would be the same for both the get and the purge.
>>
>> Here are the log details.
>>
>> DEVELOPMENT -- first the browser request, showing the hit; then the
>> purge, showing the hit. Awesome!
>>
>> 11 ReqStart     c 127.0.0.1 50808 1691945259
>> 11 RxRequest    c GET
>> 11 RxURL        c /products/sillyputty
>> 11 RxProtocol   c HTTP/1.1
>> 11 RxHeader     c Host: localhost
>> 11 RxHeader     c User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS
>> X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB7.0
>> 11 RxHeader     c Accept:
>> text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>> 11 RxHeader     c Accept-Language: en-us,en;q=0.5
>> 11 RxHeader     c Accept-Encoding: gzip,deflate
>> 11 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
>> 11 RxHeader     c Keep-Alive: 300
>> 11 RxHeader     c Connection: close
>> 11 RxHeader     c Referer: http://localhost/
>> 11 RxHeader     c Cookie:
>> remember_token=f27172bfab54dc47d20b6d8c853afb8677fa2d11
>> 11 RxHeader     c X-Forwarded-For: 127.0.0.1
>> 11 VCL_call     c recv
>> 11 VCL_return   c lookup
>> 11 VCL_call     c hash
>> 11 VCL_return   c hash
>> 11 Hit          c 1691945214
>> 11 VCL_call     c hit
>> 11 VCL_return   c deliver
>> 11 Length       c 201518
>> 11 VCL_call     c deliver
>> 11 VCL_return   c deliver
>> 11 TxProtocol   c HTTP/1.1
>> 11 TxStatus     c 200
>> 11 TxResponse   c OK
>> 11 TxHeader     c Cache-Control: max-age=8280, public
>> 11 TxHeader     c X-Runtime: 818
>> 11 TxHeader     c Content-Type: text/html; charset=utf-8
>> 11 TxHeader     c Etag: "f29fbc0160d276fb97a298bf5bce8ff3"
>> 11 TxHeader     c Server: WEBrick/1.3.1 (Ruby/1.9.1/2009-07-16)
>> 11 TxHeader     c Content-Length: 201518
>> 11 TxHeader     c Date: Fri, 12 Feb 2010 16:19:33 GMT
>> 11 TxHeader     c X-Varnish: 1691945259 1691945214
>> 11 TxHeader     c Age: 14
>> 11 TxHeader     c Via: 1.1 varnish
>> 11 TxHeader     c Connection: close
>> 11 ReqEnd       c 1691945259 1265991573.541040897 1265991573.547173977
>> 0.000077009 0.000055075 0.006078005
>>
>> 11 ReqStart     c ::1 51006 1691945309
>> 11 RxRequest    c PURGE
>> 11 RxURL        c /products/sillyputty
>> 11 RxProtocol   c HTTP/1.1
>> 11 RxHeader     c Accept: */*
>> 11 RxHeader     c User-Agent: WWW-Mechanize/1.0.0
>> (http://rubyforge.org/projects/mechanize/)
>> 11 RxHeader     c Connection: keep-alive
>> 11 RxHeader     c Keep-Alive: 300
>> 11 RxHeader     c Accept-Encoding: gzip,identity
>> 11 RxHeader     c Accept-Language: en-us,en;q=0.5
>> 11 RxHeader     c Host: localhost:8000
>> 11 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
>> 11 VCL_call     c recv
>> 11 VCL_return   c lookup
>> 11 VCL_call     c hash
>> 11 VCL_return   c hash
>> 11 Hit          c 1691945214
>> 11 VCL_call     c hit
>> 11 TTL          c 1691945214 VCL 0 1265991617
>>  0 Debug        - "VCL_error(200, Purged.)"
>> 11 VCL_return   c error
>> 11 VCL_call     c error
>> 11 VCL_return   c deliver
>> 11 Length       c 322
>> 11 VCL_call     c deliver
>> 11 VCL_return   c deliver
>> 11 TxProtocol   c HTTP/1.1
>> 11 TxStatus     c 200
>> 11 TxResponse   c Purged.
>> 11 TxHeader     c Server: Varnish
>> 11 TxHeader     c Retry-After: 0
>> 11 TxHeader     c Content-Type: text/html; charset=utf-8
>> 11 TxHeader     c Content-Length: 322
>> 11 TxHeader     c Date: Fri, 12 Feb 2010 16:20:16 GMT
>> 11 TxHeader     c X-Varnish: 1691945309
>> 11 TxHeader     c Age: 0
>> 11 TxHeader     c Via: 1.1 varnish
>> 11 TxHeader     c Connection: close
>> 11 ReqEnd       c 1691945309 1265991616.884471893 1265991616.884622097
>> 0.000173807 0.000099182 0.000051022
>>
>> ---------------------------------------
>>
>> Now my problematic STAGING system -- first the GET with the hit, then
>> the purge that fails to hit.
>>
>> 4 ReqStart     c 10.253.191.95 45944 904319331
>> 4 RxRequest    c GET
>> 4 RxURL        c /products/sillyputty
>> 4 RxProtocol   c HTTP/1.1
>> 4 RxHeader     c Host: staging1.example.com
>> 4 RxHeader     c User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X
>> 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB7.0
>> 4 RxHeader     c Accept:
>> text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>> 4 RxHeader     c Accept-Language: en-us,en;q=0.5
>> 4 RxHeader     c Accept-Encoding: gzip,deflate
>> 4 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
>> 4 RxHeader     c Keep-Alive: 300
>> 4 RxHeader     c Connection: keep-alive
>> 4 RxHeader     c Referer: http://staging1.example.com/
>> 4 RxHeader     c Cookie: cehq-id=10.252.66.194.1263417178788050;
>> __utma=240927894.185175319.1263417179.1265907679.1265923273.61;
>> __utmz=240927894.1263591912.11.2.utmcsr=localhost:3000|utmccn=(referral)|utmcmd=referral|utmcct=/;
>> __utma=229000926.194920698.1263480064.126592
>> 4 RxHeader     c X-Forwarded-For: 75.150.106.113
>> 4 VCL_call     c recv
>> 4 VCL_return   c lookup
>> 4 VCL_call     c hash
>> 4 VCL_return   c hash
>> 4 Hit          c 904319258
>> 4 VCL_call     c hit
>> 4 VCL_return   c deliver
>> 4 Length       c 8471
>> 4 VCL_call     c deliver
>> 4 VCL_return   c deliver
>> 4 TxProtocol   c HTTP/1.1
>> 4 TxStatus     c 200
>> 4 TxResponse   c OK
>> 4 TxHeader     c Server: Apache/2.2.12 (Ubuntu)
>> 4 TxHeader     c X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.9
>> 4 TxHeader     c Cache-Control: max-age=8520, public
>> 4 TxHeader     c X-Runtime: 6052
>> 4 TxHeader     c ETag: "94c1d0e1f26f0117dfc9bf3573a39f5a"
>> 4 TxHeader     c Status: 200
>> 4 TxHeader     c Vary: Accept-Encoding,User-Agent
>> 4 TxHeader     c Content-Encoding: gzip
>> 4 TxHeader     c Content-Type: text/html; charset=utf-8
>> 4 TxHeader     c Content-Length: 8471
>> 4 TxHeader     c Date: Fri, 12 Feb 2010 16:07:58 GMT
>> 4 TxHeader     c X-Varnish: 904319331 904319258
>> 4 TxHeader     c Age: 180
>> 4 TxHeader     c Via: 1.1 varnish
>> 4 TxHeader     c Connection: keep-alive
>> 4 ReqEnd       c 904319331 1265990878.630007267 1265990878.630154371
>> 0.000055075 0.000094652 0.000052452
>>
>>
>> 4 ReqStart     c 10.253.191.95 38696 904319371
>> 4 RxRequest    c PURGE
>> 4 RxURL        c /products/sillyputty
>> 4 RxProtocol   c HTTP/1.1
>> 4 RxHeader     c Accept: */*
>> 4 RxHeader     c User-Agent: WWW-Mechanize/1.0.0
>> (http://rubyforge.org/projects/mechanize/)
>> 4 RxHeader     c Connection: keep-alive
>> 4 RxHeader     c Keep-Alive: 300
>> 4 RxHeader     c Accept-Encoding: gzip,identity
>> 4 RxHeader     c Accept-Language: en-us,en;q=0.5
>> 4 RxHeader     c Host: staging1.example.com:8000
>> 4 RxHeader     c Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
>> 4 VCL_call     c recv
>> 4 VCL_return   c lookup
>> 4 VCL_call     c hash
>> 4 VCL_return   c hash
>> 4 VCL_call     c miss
>> 0 Debug        - "VCL_error(404, Not in cache.)"
>> 4 VCL_return   c error
>> 4 VCL_call     c error
>> 4 VCL_return   c deliver
>> 4 Length       c 340
>> 4 VCL_call     c deliver
>> 4 VCL_return   c deliver
>> 4 TxProtocol   c HTTP/1.1
>> 4 TxStatus     c 404
>> 4 TxResponse   c Not in cache.
>> 4 TxHeader     c Server: Varnish
>> 4 TxHeader     c Retry-After: 0
>> 4 TxHeader     c Content-Type: text/html; charset=utf-8
>> 4 TxHeader     c Content-Length: 340
>> 4 TxHeader     c Date: Fri, 12 Feb 2010 16:09:58 GMT
>> 4 TxHeader     c X-Varnish: 904319371
>> 4 TxHeader     c Age: 0
>> 4 TxHeader     c Via: 1.1 varnish
>> 4 TxHeader     c Connection: close
>> 4 ReqEnd       c 904319371 1265990998.368539810 1265990998.368721724
>> 0.000052691 0.000142813 0.000039101
>>
> _______________________________________________
> varnish-misc mailing list
> varnish-misc at projects.linpro.no
> http://projects.linpro.no/mailman/listinfo/varnish-misc
>



More information about the varnish-misc mailing list