1.4.2. Lua顺序
Nginx下Lua处理阶段与使用范围:
init_by_lua httpset_by_lua server, server if, location, location ifrewrite_by_lua http, server, location, location ifaccess_by_lua http, server, location, location ifcontent_by_lua location, location ifheader_filter_by_lua http, server, location, location ifbody_filter_by_lua http, server, location, location iflog_by_lua http, server, location, location iftimer
init_by_lua:在nginx重新加载配置文件时,运行里面lua脚本,常用于全局变量的申请。例如lua_shared_dict共享内存的申请,只有当nginx重起后,共享内存数据才清空,这常用于统计。set_by_lua:设置一个变量,常用与计算一个逻辑,然后返回结果该阶段不能运行Output API、Control API、Subrequest API、Cosocket APIrewrite_by_lua:在access阶段前运行,主要用于rewriteaccess_by_lua:主要用于访问控制,能收集到大部分变量,类似status需要在log阶段才有。这条指令运行于nginx access阶段的末尾,因此总是在 allow 和 deny 这样的指令之后运行,虽然它们同属 access 阶段。content_by_lua:阶段是所有请求处理阶段中最为重要的一个,运行在这个阶段的配置指令一般都肩负着生成内容(content)并输出HTTP响应。header_filter_by_lua:一般只用于设置Cookie和Headers等该阶段不能运行Output API、Control API、Subrequest API、Cosocket APIbody_filter_by_lua:一般会在一次请求中被调用多次, 因为这是实现基于 HTTP 1.1 chunked 编码的所谓“流式输出”的。该阶段不能运行Output API、Control API、Subrequest API、Cosocket APIlog_by_lua:该阶段总是运行在请求结束的时候,用于请求的后续操作,如在共享内存中进行统计数据,如果要高精确的数据统计,应该使用body_filter_by_lua。该阶段不能运行Output API、Control API、Subrequest API、Cosocket APItimer:
可参考官方文档: