nginx note


Nginx 变量的创建和赋值操作发?在全然不同的时间阶段 

Nginx 变量的创建只能发?在 Nginx 配置加载的时候, 或者说 Nginx 启动的时候; ?赋值操作则只会发?在请求实际处理的时候。 

Nginx 变量名的可见范围虽然是整个配置, 但每个请求都有所有变量的独?副本, 或者说都有各变量?来存放值的容器的独?副本, 彼此互不?扰。 变量值(容器)相互独立的。

变量名是全局的,变量值是请求处理相关的。

?个请求在其处理过程中, 即使经历多个不同的 location 配置块, 它使?的还是同?套 Nginx变量的副本。 

ngx_http_core

内置变量 $uri ,$request_uri 

URI 参数的值$arg_XXX 变量群 

cookie 值的$cookie_XXX 变量群

取请求头的 $http_XXX 变量群 

取响应头的 $sent_http_XXX 变量群


许多内建变量都是只读的。
$args 可以被修改,修改后影响$arg_XXX 变量群。

Nginx 变量是?持绑定存取处理程序的 ,类似于面向对象的类的成员变量 的“存取器accessor)。

Nginx 模块在创建变量时, 可以选择是否为变量分配存放值的容器, 以及是否提供与读写操作相对应的“存取处理程序”

不是所有的 Nginx 变量都拥有存放值的容器。 拥有值容器的变量在 Nginx 核?中被称为被索引的indexed) ; 反之, 则被称为未索引的non-indexed) 。 


Nginx 的请求处理阶段共有 11 个之多 。

post-readserverrewritefind-configrewritepost-rewritepreaccessaccesspost-accesstryfilescontent 以及 log 。

rewrite 阶段、 access 阶段以及 content 阶段

绝?多数 Nginx 模块在向 content 阶段注册配置指令时, 本质上是在当前的 location 配置块中注册所谓的内容处理程序content handler

每?个 location 只能有?个内容处理程序, 因此, 当在 location 中同时使?多个模块的content 阶段指令时, 只有其中?个模块能成功注册内容处理程序


应当避免在同?个 location 中使?多个模块的 content 阶段指令。

在?个 location 中使? content 阶段指令时, 通常情况下就是对应的 Nginx 模块注册该location 中的内容处理程序
不存在内容处理程序时 ,静态资源服务模块就会起作? 。
默认的静态资源服务模块 :ngx_index 模块,ngx_autoindex 模块,ngx_static 模块。
ngx_index ngx_autoindex 模块都只会作?于那些 URI / 结尾的请求,?对于不以 / 结尾的请求则会直接忽略 。
ngx_static 模块则刚好相反。