为了快速处理数据的静态集合,像域名、映射指令的值、MIME类型、请求头的字符串名一类的数据, Nginx 使用了 Hash 表。在启动和重配置时, Nginx 会为 Hash 表尽可能选用最小的值,这样存储具有同类哈希值的键的桶的大小不会超过设置的参数值(hash bucket size 哈希桶大小)。表的大小使用 Bucket 表示,在 Hash 表大小超过最大参数值之前,会持续调整。大多数hash都有对应的指令,用来调整这些参数。例如:域名 Hash 对应的指令是 server_names_hash_max_size 和 server_names_hash_bucket_size。
设置 Hash 桶大小的参数和处理器的缓存行大小的倍数有关,通过减少内存访问次数,可以提高现代处理器在 Hash 中搜索密钥的速度。如果一个哈希桶的大小等于一个处理器的缓存行的大小,那么在最坏的情况下,搜索 key 时会访问两次内存: 第一次是计算哈希桶的位置,其次是在哈希桶中搜索 key 时。如果nginx发出请求增加 最大哈希值( hash max size ) 和 哈希桶的大(hash bucket size) 的消息,那么首选应该增加 最大哈希值( hash max size )。