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;
} 
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top