| From | Sent On | Attachments |
|---|---|---|
| Ole Laursen | Jun 16, 2010 12:41 pm | |
| Igor Sysoev | Jun 16, 2010 9:27 pm | |
| Barry Abrahamson | Jun 16, 2010 10:08 pm | |
| xgdlm | Jun 16, 2010 10:56 pm | |
| Ole Laursen | Jun 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
_______________________________________________ nginx mailing list ngi...@nginx.org http://nginx.org/mailman/listinfo/nginx





