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 模块则刚好相反。



 

原文地址:https://www.cnblogs.com/niaomingjian/p/13395982.html