Some comments:<p>- You don't really need to repeat built-in VCLs in default.vcl. In the article, you can omit `vcl_hit`, `vcl_miss`, `vcl_purge`, `vcl_synth`, `vcl_hash`, etc. If you want to modify the behavior of built-in VCL, e.g. adding extra logs in vcl_purge, then just have `std.log` line and don't `return` (it will fall through to the built-in VCL). You can read more about built-in VCL on Varnish Developer Portal[1] and Varnish Cache documentation[2].<p>- Related to the above built-in VCL comment: `vcl_recv` current lacks all the guards provided by Varnish default VCL, so it's recommended to skip the `return (hash)` line at the end, so the built-in VCL can handle invalid requests and skip caching if Cookie or Authorization header is present. You may also want to use vmod_cookie[3] to keep only cookies you care about.<p>- Since Varnish is sitting behind another reverse proxy, it makes more sense to enable PROXY protocol, so client IPs are passed to Varnish as part of Proxy Protocol rather than X-Forwarded-For (so `client.ip`, etc. works). This means using `-a /var/run/varnish.sock,user=nginx,group=varnish,mode=660,PROXY`, and configuring `proxy_protocol on;` in Nginx.<p>[1]: <a href="https://www.varnish-software.com/developers/tutorials/varnish-builtin-vcl/" rel="nofollow">https://www.varnish-software.com/developers/tutorials/varnis...</a><p>[2]: <a href="https://varnish-cache.org/docs/7.4/users-guide/vcl-built-in-code.html" rel="nofollow">https://varnish-cache.org/docs/7.4/users-guide/vcl-built-in-...</a><p>[3]: <a href="https://varnish-cache.org/docs/trunk/reference/vmod_cookie.html" rel="nofollow">https://varnish-cache.org/docs/trunk/reference/vmod_cookie.h...</a>