location uri с аргументами включительно

Sergey Croitor scroitor at gmail.com
Sat Jan 12 19:10:00 UTC 2013


Доброго времени суток всем!

Пытаюсь организовать кэширование страниц с uri начинающегося со следующих
символов:
/index.php?main_page=nocachedajax&q=savelocation

Надо сделать это только для роботов

Поначалу была мысль сделать так:

location /index.php?main_page=nocachedajax&q=savelocation {
                proxy_pass      http://backend;
                proxy_cache cache;
                proxy_cache_valid 200 302 304 1800m;
                proxy_cache_valid any 1s;
                proxy_cache_key
"$request_method|$http_if_modified_since|$http_if_none_match|$host|savelocation";
                proxy_hide_header "Set-Cookie";
                proxy_ignore_headers "Cache-Control" "Expires";
                add_header Cache-Control private;
                expires 1800m;
                include         /etc/nginx/proxy.conf;
                if ($http_user_agent !~* (spider|bot|crawler)) {
                    # для нероботов не кэшируем и шлем далее на бэкенд
                    # роботоопределение грубое, но для нашего случая
достаточное
                    return 412;
                }
                error_page 412 = @fallback;
        }

или как вариант задания location
location ^~ /index.php?main_page=nocachedajax&q=savelocation {
...
}

Но в документации наткнулся на следующее:
Note that locations of all types test only a URI part of request line
without arguments. This is done because arguments in the query string may
be given in several ways
То есть все, что после "?", будет проигнорировано и совпадения с указанной
строкой не будет никогда.

Кто-то может поделиться идеей как обойти это ограничение и как правильно
указать правило для location в этом случае?

Спасибо.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20130112/8bbbb948/attachment.html>


Подробная информация о списке рассылки nginx-ru