nginx学习第六天

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

你可能感兴趣的:(nginx学习第六天)