Encontrar la longitud de una fuerza en un archivo nginx.conf
-
05-07-2019 - |
Pregunta
Tengo un problema porque mis $ memcached_keys son demasiado largas en mi archivo .conf para nginx. Estoy usando el módulo memcached pero algunas de mis direcciones URL son demasiado largas. Estoy en el proceso de intentar el uso de hashes MD5 de las urls en su lugar, pero mientras tanto me preguntaba si habría una forma de verificar la longitud de una cadena almacenada en una variable.
entonces:
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;
}
Solución
No soy positivo, pero no creo que se pueda hacer dentro del lenguaje de configuración de nginx. Sospecho que estaría documentado aquí si existiera, y no veo nada.
Otros consejos
Antigua pregunta pero ...
Para hacer este tipo de cosas, necesita una configuración de secuencias de comandos como el 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 " interno " ubicaciones en lugar de ubicaciones con nombre debido a algunas peculiaridades con la última, pero las ubicaciones con nombre también se pueden utilizar.