извлечь значение параметра запроса в лаке

У меня есть этот URL:

http://my.api.com/v1/{api_key}/{user_token}/?someparam=hello&force=true&someotherparam=world

где api_key и user_token — идентификаторы uuid

Как извлечь значение параметра запроса force и либо выполнить поиск в кэше лака, если параметр force отсутствует, ИЛИ для него установлено значение false. Если для него установлено значение true, мне нужно поразить мой внутренний сервер. Параметры запроса могут быть в любом порядке.


person cjroebuck    schedule 04.12.2012    source источник


Ответы (3)


Я предлагаю вам перевернуть логику:

sub vcl_recv { 
    if (req.url ~ "(?i)force=(true|yes)") {
        return(pass);
    }
    // other values will fall through to the safe default VCL that will do return(lookup).
}
person lkarsten    schedule 05.12.2012
comment
Как насчет использования: set req.hash_always_miss = true; как предложено на: varnish-cache.org/trac/wiki/VCLExampleEnableForceRefresh - person cjroebuck; 06.12.2012

Аналогично ответу Икарстена, но не соответствует параметру xxxtoken.

sub vcl_recv { 
    if (req.url ~ "(\?|\&)token=") {
        return(pass);
    }
}
person horec    schedule 03.11.2016

В вашем vcl_recv вы можете проверить несуществующие force= или force=true примерно так:

 if(!req.url ~ "&|\?force=" || req.url ~ "&|\?force=true") {
     return(pass);
 }
person Clarence    schedule 05.12.2012
comment
Этот принудительный поиск пропускает проверки авторизации и файлов cookie, которые выполняются в VCL по умолчанию, и поэтому немного опасен, если какой-либо из них используется. Вы можете в конечном итоге кэшировать пользовательские данные с этим. Всегда рекомендуется использовать VCL по умолчанию. - person lkarsten; 05.12.2012
comment
Я не претендовал на написание полной конфигурации vcl_recv, но попытаюсь ответить на поставленный вопрос. Естественно, следует учитывать любые правила, с которыми это должно хорошо сочетаться, будь то правила по умолчанию или нет. Попытка написать полную безопасную конфигурацию, не зная текущей конфигурации, невозможна. - person Clarence; 05.12.2012