Pergunta

Estou tendo um problema com meu US $ memcached_keys ser demasiado longo no meu arquivo .conf para nginx. Eu estou usando o módulo memcached mas alguns dos meus urls são muito longos. Eu estou no processo de tentar usuário hashes MD5 dos urls vez mas, entretanto, eu estava me perguntando se havia uma maneira que eu poderia verificar o comprimento de uma string armazenado em uma variável.

forma:

set $memcached_key "byp-$uri";
if ($args) {
    set $memcached_key "byp-$uri?$args";
}

if (len($memcache_key) < 250) {
     memcached_pass 127.0.0.1:11211;
     error_page 404 = @cache_miss;
     error_page 502 = @cache_miss;
}
else {
    pass to @cache_miss;
} 
Foi útil?

Solução

Eu não tenho certeza, mas eu não acho que isso pode ser feito dentro da linguagem nginx configuração. Eu suspeito que seria documentada aqui se existisse, e eu não vejo nada.

Outras dicas

velha questão, mas ....

Para fazer esse tipo de coisa, você precisa de uma configuração de script, como o Módulo Lua:

location / {
    set_by_lua $memcached_key '
        if not ngx.var.args then 
            return "byp-" ..  ngx.var.uri
        else 
            return "byp-" ..  ngx.var.uri .. "?" ..  ngx.var.args
        end
    ';
    content_by_lua '
        local string = string;
        if string.len($memcached_key) < 250 then
            ngx.exec("/memcached");
        else
            ngx.exec("/cache_miss");
        end
    ';
}
location /memcached {
    internal;
    memcached_pass 127.0.0.1:11211;
    error_page 404 = /cache_miss;
    error_page 502 = /cache_miss;
}
location /cache_miss {
    internal;
    ...
}

Sugerir locais "internos" em vez de locais nomeados devido a algumas peculiaridades com os locais último mas nomeados podem ser usados ??também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top