atom feed5 messages in ru.sysoev.nginxRe: Remove query parameter
FromSent OnAttachments
Ole LaursenJun 16, 2010 12:41 pm 
Igor SysoevJun 16, 2010 9:27 pm 
Barry AbrahamsonJun 16, 2010 10:08 pm 
xgdlmJun 16, 2010 10:56 pm 
Ole LaursenJun 17, 2010 8:00 am 
Subject:Re: Remove query parameter
From:Ole Laursen (ol@iola.dk)
Date:Jun 17, 2010 8:00:55 am
List:ru.sysoev.nginx

Barry Abrahamson <barry@...> writes:

On Jun 16, 2010, at 11:28 PM, Igor Sysoev wrote:

There is no way to remove a parameter, however, you can to define cache key without a query string at all or with predefined parameters only:

proxy_cache_key $proxy_host$uri; or proxy_cache_key $proxy_host$uri?$arg_one&$arg_two;

The ability to blacklist specific args from the cache key would be a nice

feature :)

Indeed. Thanks for the answers!

I've figured out how to do remove parameters with the set $args syntax, it's not pretty though. Would be trivial to do with a parser, but less trivial with regexp, I basically remove each unwanted GET parameter one-by-one and then fixup any stray & afterwards:

# remove GET parameters if ($args ~ (.*)utm_source=[^&]*(.*)) { set $args $1$2; } if ($args ~ (.*)utm_medium=[^&]*(.*)) { set $args $1$2; } if ($args ~ (.*)utm_campaign=[^&]*(.*)) { set $args $1$2; } if ($args ~ (.*)gclid=[^&]*(.*)) { set $args $1$2; } # cleanup any repeated & introduced if ($args ~ (.*)&&+(.*)) { set $args $1&$2; } # cleanup leading & if ($args ~ ^&(.*)) { set $args $1; } # cleanup ending & if ($args ~ (.*)&$) { set $args $1; }

Then proxy_pass and proxy_cache_key must reference $args, thankfully $is_args appears to work even when changing $args above :)

location / { proxy_pass http://127.0.0.1:1234$uri$is_args$args; proxy_cache_key "$scheme$host$uri$is_args$args"; ... }

Ole