AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

OpenResty實(shí)戰(zhàn)系列 | 執(zhí)行流程與階段詳解

來(lái)源: 責(zé)編: 時(shí)間:2024-07-15 17:14:16 136觀看
導(dǎo)讀場(chǎng)景我們先定義一個(gè)location塊級(jí)指令phase_echo來(lái)處理客戶(hù)端發(fā)過(guò)來(lái)請(qǐng)求URI處理。location /phase_echo { set $name "Tinywan"; echo $name; set $name "開(kāi)源技術(shù)小棧"; echo $name; set $name "Tinyw

場(chǎng)景

我們先定義一個(gè)location塊級(jí)指令phase_echo來(lái)處理客戶(hù)端發(fā)過(guò)來(lái)請(qǐng)求URI處理。IH428資訊網(wǎng)——每日最新資訊28at.com

location /phase_echo {    set $name "Tinywan";    echo $name;    set $name "開(kāi)源技術(shù)小棧";    echo $name;    set $name "Tinywan 開(kāi)源技術(shù)小棧";    echo $name;}

請(qǐng)求訪(fǎng)問(wèn)輸出結(jié)果:IH428資訊網(wǎng)——每日最新資訊28at.com

PS C:/Users/Tinywan/Desktop> curl -i http://openresty.tinywan.com/phase_echoHTTP/1.1 200 OKServer: openresty/1.17.8.2Date: Sun, 14 Jul 2024 00:31:18 GMTContent-Type: application/octet-streamTransfer-Encoding: chunkedConnection: keep-aliveTinywan 開(kāi)源技術(shù)小棧Tinywan 開(kāi)源技術(shù)小棧Tinywan 開(kāi)源技術(shù)小棧

為什么輸出全部是Tinywan 開(kāi)源技術(shù)小棧。也就是最后一個(gè)設(shè)置的變量值呢?前面設(shè)置的怎么都沒(méi)生效嗎?IH428資訊網(wǎng)——每日最新資訊28at.com

這是因?yàn)镹ginx處理每一個(gè)用戶(hù)請(qǐng)求時(shí),都是按照若干個(gè)不同階段依次處理的,而不是根據(jù)配置文件上的順序。以上配置涉及到了 兩個(gè)階段 rewrite和content階段。IH428資訊網(wǎng)——每日最新資訊28at.com

  • set屬于rewrite階段
  • echo屬于content階段

而實(shí)際執(zhí)行執(zhí)行是 rewrite階段的指令在 content階段指令之前執(zhí)行。實(shí)際的執(zhí)行順序應(yīng)當(dāng)是以下這樣子的。IH428資訊網(wǎng)——每日最新資訊28at.com

set $name "Tinywan";set $name "開(kāi)源技術(shù)小棧";set $name "Tinywan 開(kāi)源技術(shù)小棧";echo $name;echo $name;echo $name;

所以這就是為什么最終會(huì)輸出Tinywan 開(kāi)源技術(shù)小棧。帶著以上配置文件中執(zhí)行的指令,讓我們進(jìn)入Nginx執(zhí)行流程與階段詳解。IH428資訊網(wǎng)——每日最新資訊28at.com

Nginx執(zhí)行階段

Nginx處理請(qǐng)求的過(guò)程一共劃分為11個(gè)階段,按照?qǐng)?zhí)行順序依次是post-read、server-rewrite、find-config、rewrite、post-rewrite、 preaccess、access、post-access、try-files、content、log。IH428資訊網(wǎng)——每日最新資訊28at.com

所以整個(gè)請(qǐng)求的過(guò)程,是按照不同的階段執(zhí)行的,在某個(gè)階段執(zhí)行完該階段的指令之后,再進(jìn)行下一個(gè)階段的指令執(zhí)行。IH428資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行階段示例IH428資訊網(wǎng)——每日最新資訊28at.com

圖片圖片IH428資訊網(wǎng)——每日最新資訊28at.com

  1. post-read:讀取請(qǐng)求內(nèi)容階段,nginx讀取并解析完請(qǐng)求頭之后就立即開(kāi)始運(yùn)行。例如模塊 ngx_realip 就在 post-read 階段注冊(cè)了處理程序。它的功能是迫使 Nginx 認(rèn)為當(dāng)前請(qǐng)求的來(lái)源地址是指定的某一個(gè)請(qǐng)求頭的值。
  2. server-rewrite:server請(qǐng)求地址重寫(xiě)階段,當(dāng)ngx_rewrite模塊的set配置指令直接書(shū)寫(xiě)在server配置塊中時(shí),基本上都是運(yùn)行在server-rewrite階段。
  3. find-config:配置查找階段,這個(gè)階段并不支持Nginx模塊注冊(cè)處理程序,而是由Nginx核心來(lái)完成當(dāng)前請(qǐng)求與location配置塊之間的配對(duì)工作。
  4. rewrite:location請(qǐng)求地址重寫(xiě)階段,當(dāng)ngx_rewrite指令用于location中,就是再這個(gè)階段運(yùn)行的。另外ngx_set_misc(設(shè)置md5、encode_base64等)模塊的指令,還有ngx_lua模塊的set_by_lua指令和rewrite_by_lua指令也在此階段。
  5. post-rewrite:請(qǐng)求地址重寫(xiě)提交階段,當(dāng)nginx完成rewrite階段所要求的內(nèi)部跳轉(zhuǎn)動(dòng)作,如果rewrite階段有這個(gè)要求的話(huà)。
  6. preaccess:訪(fǎng)問(wèn)權(quán)限檢查準(zhǔn)備階段,ngx_limit_req和ngx_limit_zone在這個(gè)階段運(yùn)行,ngx_limit_req可以控制請(qǐng)求的訪(fǎng)問(wèn)頻率,ngx_limit_zone可以控制訪(fǎng)問(wèn)的并發(fā)度;
  7. access:訪(fǎng)問(wèn)權(quán)限檢查階段,標(biāo)準(zhǔn)模塊ngx_access、第三方模塊ngx_auth_request以及第三方模塊ngx_lua的access_by_lua 指令就運(yùn)行在這個(gè)階段。配置指令多是執(zhí)行訪(fǎng)問(wèn)控制相關(guān)的任務(wù),如檢查用戶(hù)的訪(fǎng)問(wèn)權(quán)限,檢查用戶(hù)的來(lái)源IP是否合法。
  8. post-access:訪(fǎng)問(wèn)權(quán)限檢查提交階段;主要用于配合access階段實(shí)現(xiàn)標(biāo)準(zhǔn)ngx_http_core模塊提供的配置指令satisfy的功能。satisfy all(與關(guān)系),satisfy any(或關(guān)系)
  9. try-files:配置項(xiàng)try_files處理階段;專(zhuān)門(mén)用于實(shí)現(xiàn)標(biāo)準(zhǔn)配置指令try_files的功能,如果前N-1個(gè)參數(shù)所對(duì)應(yīng)的文件系統(tǒng)對(duì)象都不存在,try-files 階段就會(huì)立即發(fā)起內(nèi)部跳轉(zhuǎn)到最后一個(gè)參數(shù)(即第 N 個(gè)參數(shù))所指定的URI.
  10. content:內(nèi)容產(chǎn)生階段,是所有請(qǐng)求處理階段中最為重要的階段,因?yàn)檫@個(gè)階段的指令通常是用來(lái)生成HTTP響應(yīng)內(nèi)容并輸出 HTTP 響應(yīng)的使命.
  11. log:日志模塊處理階段,記錄日志

OpenResty 的運(yùn)行機(jī)制

圖片圖片IH428資訊網(wǎng)——每日最新資訊28at.com

圖片來(lái)源:https://yxudong.github.io。IH428資訊網(wǎng)——每日最新資訊28at.com

OpenResty 執(zhí)行階段

OpenResty發(fā)起一個(gè)請(qǐng)求時(shí),會(huì)有相應(yīng)的執(zhí)行流程,Nginx與Lua編寫(xiě)腳本的基本構(gòu)建塊是指令執(zhí)行順序的。IH428資訊網(wǎng)——每日最新資訊28at.com

圖片IH428資訊網(wǎng)——每日最新資訊28at.com

從圖中可知OpenResty 處理請(qǐng)求大致分為4個(gè)大階段,11個(gè)小階段。IH428資訊網(wǎng)——每日最新資訊28at.com

四個(gè)大階段

  • 初始化階段(Initialization Phase)  master進(jìn)程啟動(dòng)預(yù)加載/生成worker進(jìn)程預(yù)加載
  • 重寫(xiě)、轉(zhuǎn)發(fā)、訪(fǎng)問(wèn)階段(Rewrite / Access Phase)  url轉(zhuǎn)發(fā),權(quán)限判斷
  • 內(nèi)容處理/生成階段(Content Phase)  內(nèi)容生成
  • 日志階段(Log Phase)日志記錄

七個(gè)小階段

  • init_by_lua_file:master-initing 階段,初始化全局配置或模塊
  • init_worker_by_lua_file:worker-initing 階段,初始化進(jìn)程專(zhuān)用功能
  • ssl_certificate_by_lua_file:ssl 階段,在握手時(shí)設(shè)置安全證書(shū)
  • set_by_lua_file:rewrite 階段,改寫(xiě) Nginx 變量
  • rewrite_by_lua_file:rewrite 階段,改寫(xiě) URI ,實(shí)現(xiàn)跳轉(zhuǎn)或重定向
  • access_by_lua_file:access 階段,訪(fǎng)問(wèn)控制或限速
  • content_by_lua_file:content 階段,產(chǎn)生響應(yīng)內(nèi)容
  • balancer_by_lua_file:content 階段,反向代理時(shí)選擇后端服務(wù)器
  • header_filter_by_lua_file:filter 階段,加工處理響應(yīng)頭
  • body_filter_by_lua_file:filter 階段,加工處理響應(yīng)體
  • log_by_lua_file:log 階段,記錄日志或其他的收尾工作

這些指令通常有三種形式IH428資訊網(wǎng)——每日最新資訊28at.com

  • xxx_by_lua:執(zhí)行字符串形式的 Lua 代碼:
  • xxx_by_lua_block:功能相同,但指令后是{ ...}的 Lua 代碼塊
  • xxx_by_lua_file:功能相同,但執(zhí)行磁盤(pán)上的 Lua 源碼文件。

這邊推薦使用 xxx_by_lua_file,它徹底分離了配置文件與業(yè)務(wù)代碼,讓兩者可以獨(dú)立部署,而且文件形式也讓我們更容易以模塊的方式管理組織 Lua 程序。IH428資訊網(wǎng)——每日最新資訊28at.com

OpenResty 執(zhí)行階段和 Nginx 的對(duì)照

圖片圖片IH428資訊網(wǎng)——每日最新資訊28at.com

圖片來(lái)源:https://blog.51cto.com/lisea/2425794。IH428資訊網(wǎng)——每日最新資訊28at.com

server {    listen 80;    server_name openresty.tinywan.com;    location /run_phase {        set_by_lua_block $a {            ngx.log(ngx.ERR, "Tinywan is set_by_lua_block phase")        }        rewrite_by_lua_block {            ngx.log(ngx.ERR, "Tinywan is rewrite_by_lua_block phase")        }        access_by_lua_block {            ngx.log(ngx.ERR, "Tinywan is access_by_lua_block phase")        }        content_by_lua_block {            ngx.log(ngx.ERR, "Tinywan is content_by_lua_block phase")        }        header_filter_by_lua_block {            ngx.log(ngx.ERR, "Tinywan is header_filter_by_lua_block phase")        }        body_filter_by_lua_block {            ngx.log(ngx.ERR, "Tinywan is body_filter_by_lua_block phase")        }        log_by_lua_block {            ngx.log(ngx.ERR, "Tinywan is log_by_lua_block phase")        }    }}

執(zhí)行請(qǐng)求訪(fǎng)問(wèn):IH428資訊網(wǎng)——每日最新資訊28at.com

curl -i http://openresty.tinywan.com/run_phase

查看錯(cuò)誤日志文件內(nèi)容:IH428資訊網(wǎng)——每日最新資訊28at.com

2024/07/13 12:38:43 [error] 7#7: *2 [lua] set_by_lua:2: Tinywan is set_by_lua_block phase, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"2024/07/13 12:38:43 [error] 7#7: *2 [lua] rewrite_by_lua(openresty.tinywan.com.conf:18):2: Tinywan is rewrite_by_lua_block phase, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"2024/07/13 12:38:43 [error] 7#7: *2 [lua] access_by_lua(openresty.tinywan.com.conf:22):2: Tinywan is access_by_lua_block phase, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"2024/07/13 12:38:43 [error] 7#7: *2 [lua] content_by_lua(openresty.tinywan.com.conf:26):2: Tinywan is content_by_lua_block phase, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"2024/07/13 12:38:43 [error] 7#7: *2 [lua] header_filter_by_lua:2: Tinywan is header_filter_by_lua_block phase, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"2024/07/13 12:38:43 [error] 7#7: *2 [lua] body_filter_by_lua:2: Tinywan is body_filter_by_lua_block phase, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"2024/07/13 12:38:43 [error] 7#7: *2 [lua] log_by_lua(openresty.tinywan.com.conf:38):2: Tinywan is log_by_lua_block phase while logging request, client: 172.18.0.1, server: openresty.tinywan.com, request: "GET /run_phase HTTP/1.1", host: "openresty.tinywan.com"

通過(guò)日志文件記錄可以看到執(zhí)行是按照階段順序進(jìn)行輸出。IH428資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-100984-0.htmlOpenResty實(shí)戰(zhàn)系列 | 執(zhí)行流程與階段詳解

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 大廠(chǎng)內(nèi)幕:SpringBoot項(xiàng)目為何棄用Tomcat,轉(zhuǎn)投Undertow懷抱?

下一篇: VueConf 2024 落幕,7大模塊講解 Vue 未來(lái)生態(tài)變化!

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 官方承諾:K60至尊版將會(huì)首批升級(jí)MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會(huì)搭載天璣9200+處理器和獨(dú)顯芯片X7的同時(shí),Redmi給出了官方承諾,K60至尊重大更新首批升級(jí),會(huì)首批推送MIUI 15。也就是說(shuō)雖然
  • 小米官宣:2023年上半年出貨量中國(guó)第一!

    今日早間,小米電視官方微博帶來(lái)消息,稱(chēng)2023年小米電視上半年出貨量達(dá)到了中國(guó)第一,同時(shí)還表示小米電視的巨屏風(fēng)暴即將開(kāi)始。“公布一個(gè)好消息2023年#小米電視上半年出貨量中國(guó)
  • 6月安卓手機(jī)好評(píng)榜:魅族20 Pro蟬聯(lián)冠軍

    性能榜和性?xún)r(jià)比榜之后,我們來(lái)看最后的安卓手機(jī)好評(píng)榜,數(shù)據(jù)來(lái)源安兔兔評(píng)測(cè),收集時(shí)間2023年6月1日至6月30日,僅限國(guó)內(nèi)市場(chǎng)。第一名:魅族20 Pro好評(píng)率:95%5月份的時(shí)候魅族20 Pro就是
  • 得物效率前端微應(yīng)用推進(jìn)過(guò)程與思考

    一、背景效率工程隨著業(yè)務(wù)的發(fā)展,組織規(guī)模的擴(kuò)大,越來(lái)越多的企業(yè)開(kāi)始意識(shí)到協(xié)作效率對(duì)于企業(yè)團(tuán)隊(duì)的重要性,甚至是決定其在某個(gè)行業(yè)競(jìng)爭(zhēng)中突圍的關(guān)鍵,是企業(yè)長(zhǎng)久生存的根本。得物
  • 為什么你不應(yīng)該使用Div作為可點(diǎn)擊元素

    按鈕是為任何網(wǎng)絡(luò)應(yīng)用程序提供交互性的最常見(jiàn)方式。但我們經(jīng)常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過(guò)這樣做,我們錯(cuò)過(guò)了許多內(nèi)置瀏覽器的功能。
  • 騰訊蓋樓,字節(jié)拆墻

    來(lái)源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗(yàn)嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 朋友圈可以修改可見(jiàn)范圍了 蘋(píng)果用戶(hù)可率先體驗(yàn)

    近日,iOS用戶(hù)迎來(lái)微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項(xiàng)實(shí)用功能。在新版微信中,朋友圈終于可以修改可見(jiàn)范圍,簡(jiǎn)單來(lái)說(shuō)就是已發(fā)布的朋友圈
  • 榮耀Magicbook V 14 2021曙光藍(lán)版本正式開(kāi)售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍(lán)版本正式開(kāi)售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內(nèi)存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤(pán)鍵程、
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購(gòu)買(mǎi)

    2022年1月份在國(guó)際消費(fèi)電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現(xiàn)在已經(jīng)可以購(gòu)買(mǎi)了,這款筆記本電腦被譽(yù)為世界上最薄的 14 英寸游戲筆
Top