• soooldier
    2019-01-09
    老师好,之前的问题是我描述错了,在视频里并没有说static模块生成$docoment_root变量,而是提供$docoment_root变量。而我仍然会有疑问,static模块是在content阶段,为什么在rewrite阶段中的if指令可以使用cotent阶段提供变量的值呢?content阶段执行在rewrite之后呀~

    作者回复: 变量与11个阶段是不同的,你要再看下第72课,任何变量都有一个获取变量值的函数,包括document_root变量。这个函数会根据请求中的内容(例如请求的头部或者URL),生成变量值,而针对诸如$document_root变量,只是组合location、URI、root或者alias配置而已。所以,这11个HTTP阶段,与变量值之前,并没有先后关系。

    
     1
  • soooldier
    2019-01-08
    老师好,有一个疑问是在视频中讲到require_filename,document_root,document_root这三个变量在cotent 阶段生成。在演示里通过return 200 "$request_filename"可以输出正确的结果。这里的return指令是在rewrite阶段为啥可以拿到content阶段的变量呢?(cotent阶段在rewrite阶段之后)

    作者回复: 应该是口误了,因为变量不存在生成这个概念,在Nginx启动时就已经出现这些变量了,针对每个请求这些变量的值不同而已。因此,rewrite阶段的return指令,只是去取这3个变量的值。
    关于变量,可以参考第72课变量的原理。

    
     1
  • 董昌强
    2019-01-07
    “64 static 模块提供的三个指令” 一节中,你举的例子,return 指令在 rewrite 阶段, alias 在 content 阶段,那 alias 应该不执行的,为啥返回 request_filename 还返回了 alias 的值 ?

    作者回复: alias是一个值指令,它用来告诉静态文件的目录的,通常它配合content阶段中的模块一起工作。
    return指令在rewrite阶段先于content阶段,但它没有去读文件,它只是把3个变量的值取出来返回哦。你可以参见第72课,它介绍了变量的值取出来时,只是拼出一个字符串而已。

    
    
  • Panda
    2018-12-30
    content_type 映射到Hash表这个没有听明白 麻烦老师帮忙解释一下 谢谢

    作者回复: 1、static模块读取到文件时,需要根据文件扩展名来确定response中的content-type的值。而types指令里,设置好了哪个扩展名对应哪个content-type值。
    2、如果依次查询types中的数组,那么性能太差,于是用hash表来存放types中的名值对,这样static模块可以用O(1)的算法复杂度快速找到content-type.

    
    
我们在线,来聊聊吧