2009-05-05 99 views
0

我的$ memcached_keys在我的用于nginx的.conf文件中太长时出现问题。我使用的是memcached模块,但是我的一些url太长了。我正在尝试使用URL的MD5哈希值,但同时我只是想知道是否有一种方法可以检查存储在变量中的字符串的长度。在nginx.conf文件中查找强度的长度

这样:

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; 
} 

回答

0

我还不能肯定,但我不认为它可以nginx的配置语言内完成。如果它存在,我怀疑它会被记录在here,我什么也没看到。

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; 
    ... 
} 

推荐“内部”的位置,而不是因为命名的位置到后者的一些怪癖,但也可以使用命名的位置。