OpenResty 执行阶段

简单测试一下缓存

location = /mixed {
    set_by_lua $a 'ngx.log(ngx.ERR, "set_by_lua")';
    rewrite_by_lua 'ngx.log(ngx.ERR, "rewrite_by_lua")';
    access_by_lua 'ngx.log(ngx.ERR, "access_by_lua")';
    header_filter_by_lua 'ngx.log(ngx.ERR, "header_filter_by_lua")';
    body_filter_by_lua 'ngx.log(ngx.ERR, "body_filter_by_lua")';
    log_by_lua 'ngx.log(ngx.ERR, "log_by_lua")';
    content_by_lua 'ngx.log(ngx.ERR, "content_by_lua")';
}

执行结果日志(截取了一下):异步

set_by_lua
rewrite_by_lua
access_by_lua
content_by_lua
header_filter_by_lua
body_filter_by_lua
log_by_lua

这样咱们就能够根据咱们的须要,在不一样的阶段直接完成大部分典型处理了。测试

  • set_by_lua: 流程分支处理判断变量初始化
  • rewrite_by_lua: 转发、重定向、缓存等功能(例如特定请求代理到外网)
  • access_by_lua: IP准入、接口权限、A/B测试
  • content_by_lua: 内容生成
  • header_filter_by_lua: 应答HTTP过滤处理(添加修改头部信息)
  • body_filter_by_lua: 应答BODY过滤处理(例如完成应答内容统一成大写)
  • log_by_lua: 会话完成后本地异步完成日志记录(日志能够记录在本地,还能够同步到其余机器) 

     注意access_by_lua 若是执行了ngx.say, 那么content_by_lua就不会执行,也就是access_by_lua其实能够代替content_by_lualua

在access_by_lua 阶段执行ngx.exit, 并不会中断整个请求,只会跳过content_by_lua 阶段,后面的header_filter_by_lua和body_filter_by_lua仍是会被执行。代理

相关文章
相关标签/搜索