<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hi Per Buer,</p>
<p>Just figured out that the backend wasn't sending Content-Length
and Varnish seemed to use it. I have updated the backend to send
Content-Length and now the pages are getting rendered.</p>
<p>Will post to the community mailing list if I further stumble upon
any query or roadblock.</p>
<p>Thanks,</p>
<p>Pinakee<br>
</p>
<div class="moz-cite-prefix">On 24/05/16 11:48 am, Pinakee BIswas
wrote:<br>
</div>
<blockquote
cite="mid:615dfb4e-c60b-06ba-3bc1-2e90974e0cdd@waltzz.com"
type="cite">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<p>Hi Per Buer,</p>
<p>Thanks for your response and for the tips. Would go through
them and try to implement. <br>
</p>
<p>Regarding the blank pages, I have sent a separate mail. <br>
</p>
<p>I have installed Varnish from source. Since this is the first
time with Varnish, we plan to start with simple scenarios for
caching and then move on to more sophisticated ones for logged
in users etc (also, as we scale up further).<br>
</p>
<p>Would really appreciate if you could help me resolving the
issue so that I could move ahead with configuring and deploying
Varnish. Following is the content of the mail with the issue:</p>
<p>Hi,</p>
<p>I am trying to set Varnish to cache content when login cookie
is not present. Hence, I have modified the following
subroutines:</p>
<ul>
<li>vcl_recv: If the login cookie is not present, return hash.</li>
<li>vcl_back_response: If the login cookie is not present, cache
the content (beresp.uncacheable set to false</li>
</ul>
<p>Whenever the vcl_recv is returning hash, varnish is generating
blank page with content-length set 0. If vcl_recv returns pass,
the page is served fine. <br>
</p>
<p>Following is the VCL:</p>
<p>sub vcl_recv {<br>
   # Happens before we check if we have this in cache already.<br>
   #<br>
   # Typically you clean up the request here, removing cookies
you don't need,<br>
   # rewriting the request, etc.<br>
   set req.backend_hint = uwsgi;<br>
<br>
  if (req.http.Cookie !~ "jivaana_user=") {<br>
       return(hash);<br>
   }<br>
}<br>
<br>
sub vcl_backend_response {<br>
   # Happens after we have read the response headers from the
backend.<br>
   #<br>
   # Here you clean the response headers, removing silly
Set-Cookie headers<br>
   # and other mistakes your backend does.<br>
   if (beresp.http.Set-Cookie !~ "jivaana_user=") {<br>
       if (beresp.ttl <= 0s) {<br>
               set beresp.ttl = 120s;<br>
       }<br>
       set beresp.uncacheable = false;<br>
       return (deliver);<br>
}</p>
<p>Varnish log:</p>
<p><br>
</p>
*  << BeReq   >> 3        <br>
-  Begin         bereq 2 fetch<br>
-  Timestamp     Start: 1463994442.986360 0.000000 0.000000<br>
-  BereqMethod   GET<br>
-Â Â BereqURLÂ Â Â Â Â Â /catalogue/<br>
-  BereqProtocol HTTP/1.0<br>
-  BereqHeader   Host: django_test<br>
-  BereqHeader   Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8<br>
-  BereqHeader   Upgrade-Insecure-Requests: 1<br>
-  BereqHeader   User-Agent: Mozilla/5.0 (Macintosh; Intel Mac
OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/50.0.2661.102 Safari/537.36<br>
-  BereqHeader   Accept-Language: en-US,en;q=0.8<br>
-  BereqHeader   X-Forwarded-For: 127.0.0.1<br>
-  BereqHeader   Accept-Encoding: gzip<br>
-  BereqProtocol HTTP/1.1<br>
-  BereqHeader   X-Varnish: 3<br>
-  VCL_call      BACKEND_FETCH<br>
-  VCL_return    fetch<br>
-  BackendOpen   21 boot.uwsgi 127.0.0.1 9001 127.0.0.1 38213<br>
-  Timestamp     Bereq: 1463994442.986883 0.000524 0.000524<br>
-  Timestamp     Beresp: 1463994443.734972 0.748612 0.748088<br>
-Â Â BerespProtocol HTTP/1.1<br>
-  BerespStatus  200<br>
-  BerespReason  OK<br>
-  BerespHeader  Expires: Mon, 23 May 2016 09:07:23 GMT<br>
-  BerespHeader  Vary: Cookie<br>
-  BerespHeader  Last-Modified: Mon, 23 May 2016 09:07:23 GMT<br>
-  BerespHeader  Cache-Control: max-age=0<br>
-  BerespHeader  X-Frame-Options: SAMEORIGIN<br>
-  BerespHeader  Content-Type: text/html; charset=utf-8<br>
-  BerespHeader  Set-Cookie:Â
csrftoken=5BUZRL4gdO7uTDtWXnbqQko3CelDmOAg; expires=Mon,
22-May-2017 09:07:23 GMT; Max-Age=31449600; Path=/<br>
-  BerespHeader  Date: Mon, 23 May 2016 09:07:23 GMT<br>
-Â Â TTLÂ Â Â Â Â Â Â Â Â Â Â RFC 0 10 -1 1463994444 1463994444 1463994443
1463994443 0<br>
-  VCL_call      BACKEND_RESPONSE<br>
-Â Â TTLÂ Â Â Â Â Â Â Â Â Â Â VCL 120 10 0 1463994444<br>
-  VCL_return    deliver<br>
-  Storage       file s0<br>
-  ObjProtocol   HTTP/1.1<br>
-  ObjStatus     200<br>
-  ObjReason     OK<br>
-  ObjHeader     Expires: Mon, 23 May 2016 09:07:23 GMT<br>
-  ObjHeader     Vary: Cookie<br>
-  ObjHeader     Last-Modified: Mon, 23 May 2016 09:07:23 GMT<br>
-  ObjHeader     Cache-Control: max-age=0<br>
-  ObjHeader     X-Frame-Options: SAMEORIGIN<br>
-  ObjHeader     Content-Type: text/html; charset=utf-8<br>
-  ObjHeader     Set-Cookie:Â
csrftoken=5BUZRL4gdO7uTDtWXnbqQko3CelDmOAg; expires=Mon,
22-May-2017 09:07:23 GMT; Max-Age=31449600; Path=/<br>
-  ObjHeader     Date: Mon, 23 May 2016 09:07:23 GMT<br>
-  Fetch_Body    0 none -<br>
-  BackendReuse  21 boot.uwsgi<br>
-  Timestamp     BerespBody: 1463994443.735229 0.748869 0.000257<br>
-  Length        0<br>
-  BereqAcct     393 0 393 336 0 336<br>
-  End           <br>
<br>
*  << Request >> 2        <br>
-  Begin         req 1 rxreq<br>
-  Timestamp     Start: 1463994442.986091 0.000000 0.000000<br>
-  Timestamp     Req: 1463994442.986091 0.000000 0.000000<br>
-  ReqStart      127.0.0.1 56147<br>
-  ReqMethod     GET<br>
-Â Â ReqURLÂ Â Â Â Â Â Â Â /catalogue/<br>
-  ReqProtocol   HTTP/1.0<br>
-  ReqHeader     Host: django_test<br>
-  ReqHeader     Connection: close<br>
-  ReqHeader     Cache-Control: max-age=0<br>
-  ReqHeader     Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8<br>
-  ReqHeader     Upgrade-Insecure-Requests: 1<br>
-  ReqHeader     User-Agent: Mozilla/5.0 (Macintosh; Intel Mac
OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/50.0.2661.102 Safari/537.36<br>
-  ReqHeader     Accept-Encoding: gzip, deflate, sdch<br>
-  ReqHeader     Accept-Language: en-US,en;q=0.8<br>
-  ReqHeader     Cookie: pagemap=0,0,0,0,0,1,0';
pagemap=0,0,0,0,0,0,0; jivaana_country=IN; mp_mixpanel__c=1;
mp_mixpanel__c3=2; mp_mixpanel__c4=2; mp_mixpanel__c5=0;
_ga=GA1.1.1762020660.1447765749;
mp_774636c1ed2371eaf99455f71871069c_mixpanel=%7B%22distinct_id%22%3A%20<br>
-  ReqHeader     If-Modified-Since: Mon, 23 May 2016 09:03:11
GMT<br>
-  ReqHeader     X-Forwarded-For: 127.0.0.1<br>
-  VCL_call      RECV<br>
-  ReqUnset      Cookie: pagemap=0,0,0,0,0,1,0';
pagemap=0,0,0,0,0,0,0; jivaana_country=IN; mp_mixpanel__c=1;
mp_mixpanel__c3=2; mp_mixpanel__c4=2; mp_mixpanel__c5=0;
_ga=GA1.1.1762020660.1447765749;
mp_774636c1ed2371eaf99455f71871069c_mixpanel=%7B%22distinct_id%22%3A%20<br>
-  VCL_return    hash<br>
-  ReqUnset      Accept-Encoding: gzip, deflate, sdch<br>
-  ReqHeader     Accept-Encoding: gzip<br>
-  VCL_call      HASH<br>
-  VCL_return    lookup<br>
-  VCL_call      MISS<br>
-  VCL_return    fetch<br>
-  Link          bereq 3 fetch<br>
-  Timestamp     Fetch: 1463994443.735287 0.749196 0.749196<br>
-  RespProtocol  HTTP/1.1<br>
-  RespStatus    200<br>
-  RespReason    OK<br>
-  RespHeader    Expires: Mon, 23 May 2016 09:07:23 GMT<br>
-  RespHeader    Vary: Cookie<br>
-  RespHeader    Last-Modified: Mon, 23 May 2016 09:07:23 GMT<br>
-  RespHeader    Cache-Control: max-age=0<br>
-  RespHeader    X-Frame-Options: SAMEORIGIN<br>
-  RespHeader    Content-Type: text/html; charset=utf-8<br>
-  RespHeader    Set-Cookie:Â
csrftoken=5BUZRL4gdO7uTDtWXnbqQko3CelDmOAg; expires=Mon,
22-May-2017 09:07:23 GMT; Max-Age=31449600; Path=/<br>
-  RespHeader    Date: Mon, 23 May 2016 09:07:23 GMT<br>
-  RespHeader    X-Varnish: 2<br>
-  RespHeader    Age: 0<br>
-  RespHeader    Via: 1.1 varnish-v4<br>
-  VCL_call      DELIVER<br>
-  VCL_return    deliver<br>
-  Timestamp     Process: 1463994443.735341 0.749249 0.000054<br>
-  RespHeader    Accept-Ranges: bytes<br>
-  RespHeader    Content-Length: 0<br>
-  Debug         "RES_MODE 2"<br>
-  RespHeader    Connection: close<br>
-  Timestamp     Resp: 1463994443.735410 0.749319 0.000070<br>
-  ReqAcct       929 0 929 476 0 476<br>
-  End           <br>
<br>
*  << Session >> 1        <br>
-  Begin         sess 0 HTTP/1<br>
-  SessOpen      127.0.0.1 56147 0.0.0.0:9003 127.0.0.1 9003
1463994442.985890 18<br>
-  Link          req 2 rxreq<br>
-  SessClose     RESP_CLOSE 0.750<br>
-  End           <br>
<br>
Thanks,<br>
Pinakee<br>
<div class="moz-cite-prefix">On 23/05/16 11:21 pm, Per Buer wrote:<br>
</div>
<blockquote
cite="mid:CAOXZevD+gBcsPCna7DUsmDF1dd=s9pELNbNxOHJG0k0S9JHANw@mail.gmail.com"
type="cite">
<div dir="ltr"><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Fri, May 20, 2016 at 4:38 PM,
Pinakee BIswas <span dir="ltr"><<a
moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:pinakee@waltzz.com"><a class="moz-txt-link-abbreviated" href="mailto:pinakee@waltzz.com">pinakee@waltzz.com</a></a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I am a beginner with Varnish and planning to deploy it
for our ecommerce live platform. I am trying to learn
Varnish and VCL and having trouble for our specific
scenario:<br>
<br>
I would like to cache pages when a user is not logged in
- and this is determined by a cookie (which is
standard). The ecommerce platform is based on python
Django - and there are bunch of other cookies which are
not relevant for caching but they can't be unset/removed
as they are needed by the origin/backend server.<br>
<br>
Hence, the solution would be to check if the login
cookie is present or not. If login cookie not present,
cache the page and fetch from cache else pass it to the
backend.<br>
</blockquote>
<div><br>
</div>
<div>Two tips. One is the cookie VMOD, which helps when
dealing with cookies. If you don't wanna use it you can
also look at the example here:Â <a moz-do-not-send="true"
href="https://www.varnish-cache.org/docs/4.1/users-guide/increasing-your-hitrate.html#cookies">https://www.varnish-cache.org/docs/4.1/users-guide/increasing-your-hitrate.html#cookies</a>
- it will at least point you in the right direction.</div>
<div><br>
</div>
<div>Â </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">I
tried implementing the above logic in vcl_recv and
vcl_backend_response with my limited knowledge, but
varnish started serving blank pages.<br>
</blockquote>
<div><br>
</div>
<div>That sounds like a backend bug.</div>
<div><br>
</div>
</div>
-- <br>
<div class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<table
style="border-bottom-width:1px;padding-top:5px;border-top-style:solid;width:550px;padding-bottom:5px;border-bottom-color:rgb(238,238,238);border-top-width:1px;border-bottom-style:solid;line-height:1.5em;border-top-color:rgb(238,238,238);color:rgb(102,102,102);font-size:12px;font-family:'Helvetica
Neue',Arial,sans-serif;margin-top:20px" border="0"
cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td width="100"><img moz-do-not-send="true"
src="http://www.varnish-software.com/static/media/logo-email.png"></td>
<td><font color="#222222"><span
style="font-size:14px"><b>Per Buer</b></span></font><br>
CTO | Varnish Software AS<br>
Cell:Â <a moz-do-not-send="true"
value="+4790181750"
style="color:rgb(17,85,204)">+47 95839117</a><br>
<span style="font-weight:bold">We Make
Websites Fly!<br>
<a moz-do-not-send="true"
href="https://www.varnish-software.com/"
style="color:rgb(17,85,204)"
target="_blank">www.varnish-software.com</a></span></td>
</tr>
</tbody>
</table>
<br>
<div style="color:rgb(136,136,136)"><a
moz-do-not-send="true"
href="http://info.varnish-software.com/signature"
target="_blank"><img moz-do-not-send="true"
src="http://files.varnish-software.com/signature.png"></a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>