国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - nginx利用ctx實現數據共享、修改上下文功能

nginx利用ctx實現數據共享、修改上下文功能

2020-01-02 15:01沈七 Nginx

這篇文章主要給大家介紹了關于nginx利用ctx實現數據共享、修改上下文功能的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

環境: init_worker_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, ngx.timer., balancer_by_lua

這個 Lua 表可以用來存儲基于請求的 Lua 環境數據,其生存周期與當前請求相同 (類似 Nginx 變量)。

參考下面例子,

?
1
2
3
4
5
6
7
8
9
10
11
location /test {
 rewrite_by_lua_block {
  ngx.ctx.foo = 76
 }
 access_by_lua_block {
  ngx.ctx.foo = ngx.ctx.foo + 3
 }
 content_by_lua_block {
  ngx.say(ngx.ctx.foo)
 }
}

訪問 GET /test 輸出

79

也就是說,ngx.ctx.foo 條目跨越一個請求的 rewrite (重寫),access (訪問),和 content (內容) 各處理階段保持一致。

每個請求,包括子請求,都有一份自己的 ngx.ctx 表。例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
location /sub {
 content_by_lua_block {
  ngx.say("sub pre: ", ngx.ctx.blah)
  ngx.ctx.blah = 32
  ngx.say("sub post: ", ngx.ctx.blah)
 }
}
 
location /main {
 content_by_lua_block {
  ngx.ctx.blah = 73
  ngx.say("main pre: ", ngx.ctx.blah)
  local res = ngx.location.capture("/sub")
  ngx.print(res.body)
  ngx.say("main post: ", ngx.ctx.blah)
 }
}

訪問 GET /main 輸出

main pre: 73
sub pre: nil
sub post: 32
main post: 73

這里,在子請求中修改 ngx.ctx.blah 條目并不影響父請求中的同名條目,因為它們各自維護不同版本的 ngx.ctx.blah。

內部重定向將摧毀原始請求中的 ngx.ctx 數據 (如果有),新請求將會有一個空白的 ngx.ctx 表。例如,

?
1
2
3
4
5
6
7
8
9
10
11
12
location /new {
 content_by_lua_block {
  ngx.say(ngx.ctx.foo)
 }
}
 
location /orig {
 content_by_lua_block {
  ngx.ctx.foo = "hello"
  ngx.exec("/new")
 }
}

訪問 GET /orig 將輸出

nil

而不是原始的 "hello" 值。

任意數據值,包括 Lua 閉包與嵌套表,都可以被插入這個“魔法”表,也允許注冊自定義元方法。

也可以將 ngx.ctx 覆蓋為一個新 Lua 表,例如,

ngx.ctx = { foo = 32, bar = 54 }

當用在 init_worker_by_lua* 環境中,這個表與當前 Lua 句柄生命周期相同。

ngx.ctx 表查詢需要相對昂貴的元方法調用,這比通過用戶自己的函數參數直接傳遞基于請求的數據要慢得多。所以不要為了節約用戶函數參數而濫用此 API,因為它可能對性能有明顯影響。

而且由于元方法“魔法”,不要在 lua 模塊級別試圖使用 "local" 級別的 ngx.ctx ,例如 worker-level data sharing。下面示例是糟糕的:

-- mymodule.lua

local _M = {}

-- 下面一行的 ngx.ctx 是屬于單個請求的,但 ctx 變量是在 Lua 模塊級別

-- 并且屬于單個 worker 的。

?
1
2
3
4
5
6
7
local ctx = ngx.ctx
 
function _M.main()
 ctx.foo = "bar"
end
 
return _M

應使用下面方式替代:

?
1
2
3
4
5
6
7
8
-- mymodule.lua
local _M = {}
 
function _M.main(ctx)
 ctx.foo = "bar"
end
 
return _M

就是說,調用者對 ctx 表調用應通過函數傳參方式完成。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/shenlinken/p/10156185.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品无码久久久久 | 国产视频1区| 91精品国产综合久久久久久丝袜 | 在线观看a毛片 | 久久一区二区三区四区 | 中文字幕 亚洲一区 | 欧洲色视频| 久久中文字幕一区 | 97操视频 | 四虎影视永久免费观看 | 国产精品国产成人国产三级 | 欧美日韩国产在线 | 91亚洲视频| 性高潮一级片 | 成人免费毛片aaaaaa片 | 久久久精选 | 亚洲性视频 | 欧美老妇交乱视频 | a免费在线 | 精品欧美乱码久久久久久1区2区 | 秋霞电影院午夜伦 | 婷婷精品久久久久久久久久不卡 | 欧美日韩三级 | 久久99精品久久久 | 欧美一区二区在线观看 | www.fefe66.com | 久久伊人精品网 | 四虎av成人| 蜜桃臀一区二区三区 | 91精品久久久久久久 | 欧美综合成人网 | 91麻豆精品国产91久久久资源速度 | 一区二区在线视频 | 亚洲第一色 | 亚洲一区精品在线 | 亚洲狠狠爱一区二区三区 | 成人av一区二区三区 | 人人澡人人射 | 日韩欧美中字 | 久热免费在线观看 | 黄色短视频在线观看 |