NGX_LUA | 0neday's Notes
<meta name="keywords" content="Nginx,"/>

<meta name=“description” content="&nbsp;
Nginx 是一个高性能,支持高并发的,轻量级的 Web Sever。 Nginx 采用模块化的架构, 可以通过开发 Nginx 的扩展模块 , 将 Nginx 打造成一个全能的 Web Sever, 即将一些功能在前端 Nginx 反向代理层解决,比如登录校验、js 合并等。

  1. Nginx 进程模型"/>




    <meta property=“og:description” content="&nbsp;
    Nginx 是一个高性能,支持高并发的,轻量级的 Web Sever。 Nginx 采用模块化的架构, 可以通过开发 Nginx 的扩展模块 , 将 Nginx 打造成一个全能的 Web Sever, 即将一些功能在前端 Nginx 反向代理层解决,比如登录校验、js 合并等。

  2. Nginx 进程模型"/>




    <meta name=“twitter:description” content="&nbsp;
    Nginx 是一个高性能,支持高并发的,轻量级的 Web Sever。 Nginx 采用模块化的架构, 可以通过开发 Nginx 的扩展模块 , 将 Nginx 打造成一个全能的 Web Sever, 即将一些功能在前端 Nginx 反向代理层解决,比如登录校验、js 合并等。

  3. Nginx 进程模型"/>

<link rel="stylesheet" href="/css/personal-style.css"/>
<span id="toolbox-mobile" class="toolbox-mobile">导航</span>
导航
        <li class="item-toolbox">
          <a class="CIRCLE" href="/archives/" target="_self" rel="noopener noreferrer">
            博客
          </a>
        </li>
      
        <li class="item-toolbox">
          <a class="CIRCLE" href="/category/" target="_self" rel="noopener noreferrer">
            分类
          </a>
        </li>
      
        <li class="item-toolbox">
          <a class="CIRCLE" href="/tag/" target="_self" rel="noopener noreferrer">
            标签
          </a>
        </li>
      
        <li class="item-toolbox">
          <a class="CIRCLE" href="/link/" target="_self" rel="noopener noreferrer">
            友链
          </a>
        </li>
      
        <li class="item-toolbox">
          <a class="CIRCLE" href="/about/" target="_self" rel="noopener noreferrer">
            关于
          </a>
        </li>
      
        <li class="item-toolbox">
          <a class="CIRCLE" href="/search/" target="_self" rel="noopener noreferrer">
            搜索
          </a>
        </li>
      
    </ul>
    
文章目录
  <p> </p>

Nginx 是一个高性能,支持高并发的,轻量级的 Web Sever。 Nginx 采用模块化的架构, 可以通过开发 Nginx 的扩展模块 , 将 Nginx 打造成一个全能的 Web Sever, 即将一些功能在前端 Nginx 反向代理层解决,比如登录校验、js 合并等。

1. Nginx 进程模型

0_1330494922Q49n

Nginx 采用多进程模型,单 Master — 多 Worker,由 Master 处理外部信号、配置文件的读取及 Worker 的初始化,Worker 进程采用 单线程、非阻塞的事件模型(Event Loop,事件循环)来实现端口的监听及客户端请求的处理和响应,同时Worker还要处理来自 Master 的信号。

表面上看,当 Nginx 处理一个来自客户端的请求时,先根据请求头的host、ip和 port 来确定由哪个 server 处理,确定了 server 之后,再 根据请求的 uri 找到对应的 location,这个请求就由这个location 处理。实际 Nginx 将一个请求的处理划分为若干个不同阶段 (phase),这些阶段按照前后顺序依次执行。

1
2
3
4
5
6
7
8
9
10
11
NGX_HTTP_POST_READ_PHASE, //0读取请求phase
NGX_HTTP_SERVER_REWRITE_PHASE,//1这个阶段主要是处理全局的(server block)的rewrite
NGX_HTTP_FIND_CONFIG_PHASE, //2这个阶段主要是通过uri来查找对应的location,然后根据loc_conf设置r的相应变量
NGX_HTTP_REWRITE_PHASE, //3这个主要处理location的rewrite
NGX_HTTP_POST_REWRITE_PHASE, //4postrewrite,这个主要是进行一些校验以及收尾工作,以便于交给后面的模块。
NGX_HTTP_PREACCESS_PHASE, //5比如流控这种类型的access就放在这个phase,也就是说它主要是进行一些比较粗粒度的access。
NGX_HTTP_ACCESS_PHASE, //6这个比如存取控制,权限验证就放在这个phase,一般来说处理动作是交给下面的模块做的.这个主要是做一些细粒度的access
NGX_HTTP_POST_ACCESS_PHASE, //7一般来说当上面的access模块得到access_code之后就会由这个模块根据access_code来进行操作
NGX_HTTP_TRY_FILES_PHASE, //8try_file模块,就是对应配置文件中的try_files指令,可接收多个路径作为参数,当前一个路径的资源无法找到,则自动查找下一个路径
NGX_HTTP_CONTENT_PHASE, //9内容处理模块
NGX_HTTP_LOG_PHASE //10log模块

2. ngx_lua

 

waiting for update……