nginx cookie - how to inject variable into cookie

Maxim Dounin mdounin at mdounin.ru
Mon Jun 1 14:45:14 MSD 2009


Hello!

On Sun, May 31, 2009 at 02:05:12AM -0700, Payam Chychi wrote:

> Hey,
> 
> im trying to compare the cookie with  the remote_addr via nginx but
> nginx sees $remote_addr as the text and not the a variable ... so it
> wont match properly
> I do have two cookies... the one I need to match for is the 2nd cookie
> "YPF8827340282Jdskjhfiw_928937459182JAX666=96.48.77.222"
> 
>                 if ( $http_cookie !~
> YPF8827340282Jdskjhfiw_928937459182JAX666=$remote_addr ) {
>                         rewrite  ^(.*)$  /check/$host.shtml  last;
>                         break;
>                 }

This wont work since nginx doesn't allow variables in a right-hand side 
of the expression.  Workaround is to use something like this:

    set $blah "$remote_addr:$http_cookie";
    if ($blah !~ "^([0-9.]+):.*YPF8827340282Jdskjhfiw_928937459182JAX666=\1") {
        ...
    }

This uses static pattern with pcre builtin backreference and will 
work as expected.

Maxim Dounin





More information about the nginx mailing list