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仍是會被執行。代理

相關文章
相關標籤/搜索