Recherche de la longueur d'une force dans un fichier nginx.conf
-
05-07-2019 - |
Question
J'ai un problème avec mon $ memcached_keys trop long dans mon fichier .conf pour nginx. J'utilise le module memcached mais certaines de mes URL sont trop longues. Je suis en train d'essayer plutôt d'utiliser les hachages MD5 des utilisateurs MD5, mais entre-temps, je me demandais s'il était possible de vérifier la longueur d'une chaîne stockée dans une variable.
alors:
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;
}
La solution
Je ne suis pas positif, mais je ne pense pas que cela puisse être fait dans le langage de configuration nginx. Je soupçonne que cela serait documenté ici s'il existait déjà et que je ne vois rien.
Autres conseils
Ancienne question mais ....
Pour faire ce genre de chose, vous avez besoin d'une configuration de script telle que le module 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;
...
}
Suggérer " internal " emplacements au lieu d'emplacements nommés en raison de quelques bizarreries avec ce dernier, mais les emplacements nommés peuvent également être utilisés.