1

我的 $memcached_keys 在 nginx 的 .conf 文件中太长时遇到问题。我正在使用 memcached 模块,但我的一些网址太长了。我正在尝试使用 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;
} 
4

2 回答 2

3

老问题但是....

要执行此类操作,您需要一个脚本设置,例如 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;
    ...
}

由于后者的一些怪癖,建议“内部”位置而不是命名位置,但也可以使用命名位置。

于 2012-03-15T04:32:13.447 回答
0

我不是很肯定,但我认为它不能在 nginx 配置语言中完成。我怀疑如果它存在,它会被记录在这里,我什么也没看到。

于 2009-05-06T13:19:01.617 回答