Alterando o valor proxy_cache_valid com base na consulta GET

2

No momento, estou tentando configurar um cache nginx que deve armazenar em cache um local por um longo período, mas se os parâmetros de consulta estiverem presentes por apenas alguns minutos.

Então basicamente:

http://example.com/mypath -> long cache
http://example.com/mypath?param=1 -> short cache

Minha configuração atual é algo assim:

location "~^(/mypath)"
{
        proxy_cache        example.com_my_cache_http;
        proxy_cache_valid 404 15m;
        ...
}

Não consigo usar locais diferentes porque os locais não podem corresponder aos parâmetros de consulta. Eu tentei usar um if (eu sei que é uma prática ruim)

if ($args ~ param) {
            proxy_cache        example.com_my_cache_http;
            proxy_cache_valid 404 15m;
} else {
            proxy_cache        example.com_my_cache_http;
            proxy_cache_valid 404 2d;
}

Isso resulta em:

Testing nginx configuration: nginx: [emerg] "proxy_cache" directive is not allowed here

Eu também tentei usar variáveis:

    set $time "1h";

    if ($args ~ param) {
        set $time "2m";
    }

    proxy_cache        example.com_my_cache_http;
    proxy_cache_valid 404 $time;

Isso resulta em:

Testing nginx configuration: nginx: [emerg] invalid time value "$time" 

Estou realmente sem ideias. Qualquer ajuda ou sugestão é apreciada.

    
por gries 19.12.2014 / 11:59

1 resposta

1

Meu primeiro pensamento seria usar um map .

map $arg_param $cache_valid_404 {
    ""      2d;
    1       15m;
}

Então você define:

proxy_cache_valid 404 $cache_valid_404;
    
por 19.12.2014 / 15:32