Encontrar o comprimento de uma força em um arquivo nginx.conf
-
05-07-2019 - |
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;
}
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.