一、原理
nginx中变量相关的模块包括提供变量、使用变量的模块。整个过程如下:
- nginx启动,并执行到HTTP模块。
- 有一个回调方法叫preconfiguration,该回调方法在读取config文件之前,开始定义变量,比如我们经常使用的remote_addr等变量,它会定义出一对变量:解析变量的方法、变量名。该变量方法可以获取到变量的值。
- 当http头部接收完之后,开始读取conf文件的配置,当读到一个变量时,会根据变量名找到对应的方法,调用方法,获取到变量的值,所以nginx变量值的获取是惰性的,只有在要使用的时候进行计算。
注意:由于变量的值只会在使用的那一刻进行计算获取,所以获取到的也只是那一刻的值。
二、变量相关的指令
nginx专门设计了一个hash表用来存储变量。
- variables_hash_bucket_size: 使用variables_hash_bucket_size size,size默认是64字节。当变量名定义的非常长的时候,就需要使用该指令进行扩展了。
- variabled_hash_max_size:使用variabled_hash_max_size size,size默认1024字节,当定义的变量很多时,内存不够用,就需要对内存进行扩展了。