regex matching on a cookie

Harish Sundararaj tuxtoti at gmail.com
Mon Sep 3 19:52:24 UTC 2012


Hi all,

After a bit of head scratching, I came up with this:

1) Parse $integerA from the URI
2) Have two map blocks.
a) one to get $TermC from the cookie
b) one to map a backend based on the $TermC

Here is what I have got:

        map $http_cookie $termC {
                ~adq_cnv(\d+)=($integer[^;]+#(\w{2}))(?:;|$) $3;
                default "WX";
        }

       map $termC $backend {
            WX w.x.y.z;
            AB a.b.c.d;
       }


location ~ ^/cnvpb/(\d+)/ {
set $cmpid $1;
proxy_pass http://$backend;
}


But unfortunately it fails saying - "invalid number of map
parameters". I think its something to do with variable interpolation.
So a few questions:
1) How do I substitute a variable inside a regex ?
2) The regex works with a if condition. I kind of extended it from
here: http://wiki.nginx.org/HttpRewriteModule#if. But there seems to
be a "space" between "[^;]" and "+" not sure why. Is that right?
3) Anything else that can be done better?

Thanks
Harish


On Mon, Sep 3, 2012 at 9:04 PM, Harish Sundararaj <tuxtoti at gmail.com> wrote:
> Hello,
>
> I have a URI like this:
>
> example.com/cnvpb/$IntegerA/$TermA
>
> eg:
> example.com/cnvpb/1233/Q4
>
> For this request , I might get cookies with names like
>
> abc_cnv1, abc_cnv2, abc_cnv3....abc_cnv5
>
> all or some of them. The value of these cookies are of the format:
>
> $integerB#$TermB#$integerC#$TermC
>
> Eg:
> 1234#blahblah#45#Q1
>
> Now this is the requirement:
>
> If for any of the cookies in abc_cnv[1-5], $integerA equals $intergerB
> choose an upstream based on $TermC.
>
> I have figured out few of things:
>
> 1) Parsing $integerA - Using a regex in the location block
> 2) Choosing an upstream based on $TermC - using a map block
>
> However, I'm stuck at reading cookies (not sure how to read only :
> abc_cnv[1-5]). I understand it can be done using multiple ifs .
> But I'm sure there should be a better way than that.
>
> Any pointers?
>
> Thanks
> Harish



More information about the nginx mailing list