作者回复: 变量与11个阶段是不同的,你要再看下第72课,任何变量都有一个获取变量值的函数,包括document_root变量。这个函数会根据请求中的内容(例如请求的头部或者URL),生成变量值,而针对诸如$document_root变量,只是组合location、URI、root或者alias配置而已。所以,这11个HTTP阶段,与变量值之前,并没有先后关系。
作者回复: 应该是口误了,因为变量不存在生成这个概念,在Nginx启动时就已经出现这些变量了,针对每个请求这些变量的值不同而已。因此,rewrite阶段的return指令,只是去取这3个变量的值。
关于变量,可以参考第72课变量的原理。
作者回复: alias是一个值指令,它用来告诉静态文件的目录的,通常它配合content阶段中的模块一起工作。
return指令在rewrite阶段先于content阶段,但它没有去读文件,它只是把3个变量的值取出来返回哦。你可以参见第72课,它介绍了变量的值取出来时,只是拼出一个字符串而已。
作者回复: 1、static模块读取到文件时,需要根据文件扩展名来确定response中的content-type的值。而types指令里,设置好了哪个扩展名对应哪个content-type值。
2、如果依次查询types中的数组,那么性能太差,于是用hash表来存放types中的名值对,这样static模块可以用O(1)的算法复杂度快速找到content-type.