ngx_http_upstream_hash_module
本模块由第三方提供,不包含在 Nginx 的源码发布版中。
upstream_hash该模块提供了简单的上游负载分配,通过散列一个可配置的变量(例如,请求URI,传入的HTTP标头或一些组合)。用法示例如下:
upstream backend {: server server1;: server server2;: hash $request_uri;}
在这里,nginx将通过散列请求的URI($ REQUEST_URI)选择Server1或Server2。
指令
[#hash hash] [#hash_method hash_method] [#hash_again hash_again]
Template:Anchor
hash
语法: hash $variable
作用域: upstream
启用上游$variable变量的散列。
目前,“服务器”指令不能执行任何参数("weight", "max_fails",等)。
Template:Anchor
hash_method
语法: hash_method [ crc32 | simple ]
默认值: simple
作用域: upstream
该哈希算法使用 “crc32”取用crc32值的最后15位,并通过服务器数量按模计算。(此行为兼容与libmemcache。)详见如下描述的“The "simple" hash algorithm”。
Template:Anchor
hash_again
语法: hash_again number
默认值: 0
作用域: upstream
如果后端连接失败时,用时间数量重新处理值,并选择不同的服务器。增加该数字以提供高可用性。
Template:Anchor
安装
该模块不是Nginx源的分布。您可以在这里下载request_hash 模块:nginx_upstream_hash-0.2.tar.gz 。
解压后,你将需要打补丁到最新的Nginx源(0.5.21版本)。运行补丁如下:
: cd nginx-0.5.21: patch -p0 < /path/to/upstream/hash/directory/nginx-0.5.21.patch
然后添加以下选项到你的Nginx ./configure命令中:
: --add-module=path/to/upstream/hash/directory
然后,正常运行"make"和"make install"。
Template:Anchor
The "simple" hash algorithm
"simple" hash algorithm是与Nginx内部哈希表中使用的相同。该功能是:
u_int ngx_hash_key(u_char *data, size_t len){: u_int i, key;: key = 0;: for (i = 0; i < len; i++) {: key *= 31; : key += data[i] ;: }: return key;}
该哈希值是被选择服务器数量的modulo'd 。一个服务器索引可以由出现在上游块的顺序来确定。