Keeping multiple cookies based on regex or prefix, with Varnish 6.0

Johan Hendriks joh.hendriks at gmail.com
Tue Nov 16 22:41:50 UTC 2021


On 15/11/2021 15:08, Batanun B wrote:
> Hi,
>
> We use Varnish Cache 6.0 LTS, with varnish modules 0.15.0. As far as I 
> can see, this includes a version of the cookie vmod that doesn't 
> support regex. Yet, our use case leans towards using a regex, or at 
> least a substring.
>
> Case in point. Our frontend uses a bunch of cookies. And a handful of 
> them is needed by the backend too. I have done a simple test case, 
> with a just a single cookie, and was able to use the built in cookie 
> vmod to allow that cookie to go through to the backend. But in order 
> for this to be useful for us, we need to allow multiple cookies. 
> Cookies that we don't know the exact name of when writing the VCL. But 
> they will all start with a defined prefix.
>
> Example:
> The incoming request contains the following cookie header:
>
> *Cookie: _fbp=fb.123; _gid=GA1.2.3; custom-x=qwerty; _ga_ABCD=GS1.123; 
> custom-y=qwerty; _ga=GA1123*
>
> And we want to keep all cookies that start with "custom-", hence we 
> want the rewritten cookie header to be:
>
> *Cookie: custom-x=qwerty; custom-y=qwerty*
>
> How can we achieve this with our version of Varnish and varnish-modules?
>
> _______________________________________________
> varnish-misc mailing list
> varnish-misc at varnish-cache.org
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc


Maybe you can use the cookie config from the drupal vcl example on 
https://www.varnish-software.com/developers/tutorials/configuring-varnish-drupal/

if (req.http.Cookie) {
         set req.http.Cookie = ";" + req.http.Cookie;
         set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
         set req.http.Cookie = regsuball(req.http.Cookie, 
";(S?custom-[a-z0-9]+)=", "; \1=");
         set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
         set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; 
]+$", "");

         if (req.http.cookie ~ "^\s*$") {
             unset req.http.cookie;
         } else {
             return(pass);
         }
}


If my regex foo is not failing me it will keep all cookie's that start 
with custom- and what comes after the dash.
For this there is no need to use the cookie module as this works with a 
plain varnish-cache install.


regards
Johan Hendriks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-misc/attachments/20211116/1a7beac3/attachment-0001.html>


More information about the varnish-misc mailing list