Nginx执行阶段

熟悉Nginx的人都应该知道Nginx对请求的处理是分阶段的,每个阶段做特定类型的操作,这样第三方开发者就能根据自己模块的特点去挂载到不同的阶段。

在OpenResty中,唯一不同的就是我们是挂在我们的代码。为了清晰的说明各个阶段,我们将lua挂载到所有的阶段,并查看返回。

location /mixed {
    set_by_lua_block $a {
        ngx.log(ngx.ERR, "set_by_lua_block")
    }
    rewrite_by_lua_block {
        ngx.log(ngx.ERR, "rewrite_by_lua_block")
    }
    access_by_lua_block {
        ngx.log(ngx.ERR, "access_by_lua_block")
    }
    content_by_lua_block {
        ngx.say("ok");
    }
    header_filter_by_lua_block {
        ngx.log(ngx.ERR, "header_filter_by_lua_block")
    }
    body_filter_by_lua_block {
        ngx.log(ngx.ERR, "body_filter_by_lua_block")
    }
    log_by_lua_block {
        ngx.log(ngx.ERR, "log_by_lua_block")
    }
}

我们从errors.log中就能看到各个阶段的打印信息了,这样做可以让不同阶段的任务分工明确,易于拆分。

各个阶段的作用如下:

这样如果我们开发了一个明文版本的api,这时需要tls加密,只需要在access阶段完成密文解码,并在body_filter阶段完成信息加密即可。