<div dir="ltr">Hi Danila,<div><br></div><div>Check "man vcl", specifically beresp.do_esi and resp.do_esi.</div><div><br></div><div>From what I understand, you want to always enable the former, and only enable the latter conditionally. For example, the edges could add a header "varnish-edge-token" to their request to the primary varnish, and you could have that VCL there:</div><div><br></div><div>sub vcl_deliver {</div><div>  if (req.http.varnish-edge-token == "MYTOKEN") {</div><div>    set resp.do_esi = false;</div><div>  }</div><div>}</div><div><br></div><div>Should be fairly straightforward.</div><div><br></div><div>Cheers,</div><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>-- <br></div>Guillaume Quintard<br></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Sep 15, 2019 at 12:19 AM Danila Vershinin <<a href="mailto:ciapnz@gmail.com">ciapnz@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Hi,</div><br><div>I'm trying to understand whether it's feasible to build a CDN of Varnish instances, whose primary origin(backend) is a  Varnish instance which processes an ESI-capable app.</div><br><div>So basically:</div><br><div>USA visitor -> Varnish USA -> Varnish primary -> THE APP with ESI blocks</div><div>RUS visitor -> Varnish RUS -> Varnish primary -> THE APP with ESI blocks</div><div>CAN -> Varnish primary -> THE APP with ESI blocks</div><br><div>The APP emits HTML with ESI tags for different blocks, and sure enough, those have different cache policies.</div><div>If a request arrives to an edge Varnish, I want it to talk to the primary Varnish  (so as to cache on the edge against a primary cache), but this "Varnish primary" serves the content with ESI already assembled. Thus there is no telling, how long we should cache that full page HTML on the edges.</div><br><div>Q: Is there a magic way to instruct the primary Varnish to not do ESI processing on the content that was <em>already cached</em> ??</div><div>Meaning keep things as usual if request arrives directly to primary Varnish (ESI on), but receive non-assembled HTML (with esi tags inside) otherwise, so that edges can do assembling themselves, and thus cache things on the edge with proper TTLs for blocks.</div><br><div>Or I just have to resort to completely disabling do_esi on the primary server? Which I could do, but that must mean that the primary Varnish cannot serve visitors directly (= loosing the edge location with lowest latency to nearby users).</div><br>_______________________________________________<br>
varnish-misc mailing list<br>
<a href="mailto:varnish-misc@varnish-cache.org" target="_blank">varnish-misc@varnish-cache.org</a><br>
<a href="https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc" rel="noreferrer" target="_blank">https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc</a><br>
</blockquote></div>