Нахождение длины strength в файле nginx.conf
-
05-07-2019 - |
Вопрос
У меня возникла проблема с тем, что мои $memcached_keys слишком длинные в моем файле .conf для nginx.Я использую модуль memcached, но некоторые из моих URL-адресов слишком длинные.Вместо этого я пытаюсь использовать хэши URL-адресов MD5, но в то же время мне просто интересно, есть ли способ проверить длину строки, хранящейся в переменной.
итак:
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;
}
Решение
Я не уверен, но я не думаю, что это можно сделать на языке конфигурации nginx.Я подозреваю, что это было бы задокументировано здесь если бы это существовало, а я ничего не вижу.
Другие советы
Старый вопрос , но ....
Чтобы делать подобные вещи, вам нужна настройка сценариев, такая как модуль 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;
...
}
Предложите "внутренние" местоположения вместо именованных местоположений из-за нескольких особенностей последнего, но именованные местоположения также могут быть использованы.