ngx_hash_wildCard_t
只能包含通配符再前的key或者通配符在后的key。不能同时保函两种类型的通配符
构建一个包含通配符key的hash表
hint构造一个通配符hash表的一些参数的一个集合。关于参数对应的类型说明,请参见ngx_hash_t类型中ngx_hash_init函数的说明。
names构造此hash表的所有通配符key的数组。特别要注意的是这里的key已经都是被预处理过的。 例如:“*.abc.com”或者“.abc.com”被预处理完成以后,变成了“com.abc.”。
而“mail.xxx.*”则被预处理为“mail.xxx.”。为什么会被处理这样?这里不得不简单地描述
一下通配符 hash 表的实现原理。当构造此类型的 hash 表的时候,实际上是构造了一个 hash
表的一个“链表”,是通过 hash 表中的 key“链接”起来的。比如:对于“*.abc.com”将会
构造出 2 个 hash 表,第一个 hash 表中有一个 key 为 com 的表项,该表项的 value 包含有
指向第二个 hash 表的指针,而第二个 hash 表中有一个表项 abc,该表项的 value 包含有指
向 *.abc.com对应的 value 的指针。那么查询的时候,比如查询www.abc.com的时候,先
查 com,通过查 com 可以找到第二级的 hash 表,在第二级 hash 表中,再查找 abc,依次
类推,直到在某一级的 hash 表中查到的表项对应的 value 对应一个真正的值而非一个指向下
一级 hash 表的指针的时候,查询过程结束。 ** 这里有一点需要特别注意的,就是 names 数
组中元素的 value 所对应的值(也就是真正的 value 所在的地址)必须是能被 4 整除的,或者
nelts name 数组元素的个数
该函数执行成功返回NGX_OK,否则NGX_ERROR.
该函数查询包含通配符在前的key的hash表
hwc hash 表对象的指针
name 需要查询的域名
len name 的长度
ngx_hash_combined_t
组合类型hash表,该表的定义如下:
该类型实际上包含了三个hash表,一个向前通配符的hash表和一个包含向后通配符的hash表
nginx提供该类型的作用,提供一个方便的容器包含三个类型的hash表,包含通配符的和不包含通配符的key构建hash表以后,以一种方便的方式来查询,不需要考虑一个key到底是那个雷松的hash表里去查
如果查询到多个匹配只返回第一个
hash此组合hash表对象
key根据name计算出来的hash值。
name key的具体内容
len name的长度
返回查询结果,未查询到则返回null