日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

OpenResty實戰系列 | 執行流程與階段詳解

來源: 責編: 時間:2024-07-15 17:14:16 195觀看
導讀場景我們先定義一個location塊級指令phase_echo來處理客戶端發過來請求URI處理。location /phase_echo { set $name "Tinywan"; echo $name; set $name "開源技術小棧"; echo $name; set $name "Tinyw

場景

我們先定義一個location塊級指令phase_echo來處理客戶端發過來請求URI處理。3qG28資訊網——每日最新資訊28at.com

location /phase_echo {    set $name "Tinywan";    echo $name;    set $name "開源技術小棧";    echo $name;    set $name "Tinywan 開源技術小棧";    echo $name;}

請求訪問輸出結果:3qG28資訊網——每日最新資訊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 開源技術小棧Tinywan 開源技術小棧Tinywan 開源技術小棧

為什么輸出全部是Tinywan 開源技術小棧。也就是最后一個設置的變量值呢?前面設置的怎么都沒生效嗎?3qG28資訊網——每日最新資訊28at.com

這是因為Nginx處理每一個用戶請求時,都是按照若干個不同階段依次處理的,而不是根據配置文件上的順序。以上配置涉及到了 兩個階段 rewrite和content階段。3qG28資訊網——每日最新資訊28at.com

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

而實際執行執行是 rewrite階段的指令在 content階段指令之前執行。實際的執行順序應當是以下這樣子的。3qG28資訊網——每日最新資訊28at.com

set $name "Tinywan";set $name "開源技術小棧";set $name "Tinywan 開源技術小棧";echo $name;echo $name;echo $name;

所以這就是為什么最終會輸出Tinywan 開源技術小棧。帶著以上配置文件中執行的指令,讓我們進入Nginx執行流程與階段詳解。3qG28資訊網——每日最新資訊28at.com

Nginx執行階段

Nginx處理請求的過程一共劃分為11個階段,按照執行順序依次是post-read、server-rewrite、find-config、rewrite、post-rewrite、 preaccess、access、post-access、try-files、content、log。3qG28資訊網——每日最新資訊28at.com

所以整個請求的過程,是按照不同的階段執行的,在某個階段執行完該階段的指令之后,再進行下一個階段的指令執行。3qG28資訊網——每日最新資訊28at.com

執行階段示例3qG28資訊網——每日最新資訊28at.com

圖片圖片3qG28資訊網——每日最新資訊28at.com

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

OpenResty 的運行機制

圖片圖片3qG28資訊網——每日最新資訊28at.com

圖片來源:https://yxudong.github.io。3qG28資訊網——每日最新資訊28at.com

OpenResty 執行階段

OpenResty發起一個請求時,會有相應的執行流程,Nginx與Lua編寫腳本的基本構建塊是指令執行順序的。3qG28資訊網——每日最新資訊28at.com

圖片3qG28資訊網——每日最新資訊28at.com

從圖中可知OpenResty 處理請求大致分為4個大階段,11個小階段。3qG28資訊網——每日最新資訊28at.com

四個大階段

  • 初始化階段(Initialization Phase)  master進程啟動預加載/生成worker進程預加載
  • 重寫、轉發、訪問階段(Rewrite / Access Phase)  url轉發,權限判斷
  • 內容處理/生成階段(Content Phase)  內容生成
  • 日志階段(Log Phase)日志記錄

七個小階段

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

這些指令通常有三種形式3qG28資訊網——每日最新資訊28at.com

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

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

OpenResty 執行階段和 Nginx 的對照

圖片圖片3qG28資訊網——每日最新資訊28at.com

圖片來源:https://blog.51cto.com/lisea/2425794。3qG28資訊網——每日最新資訊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")        }    }}

執行請求訪問:3qG28資訊網——每日最新資訊28at.com

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

查看錯誤日志文件內容:3qG28資訊網——每日最新資訊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"

通過日志文件記錄可以看到執行是按照階段順序進行輸出。3qG28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-100984-0.htmlOpenResty實戰系列 | 執行流程與階段詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 大廠內幕:SpringBoot項目為何棄用Tomcat,轉投Undertow懷抱?

下一篇: VueConf 2024 落幕,7大模塊講解 Vue 未來生態變化!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
精品成人在线视频| 久久久精品一区| 亚洲全部视频| 黄色亚洲在线| 在线观看欧美日本| 亚洲国产欧美久久| 亚洲精品韩国| 国产日韩精品久久久| 国产亚洲精品久久飘花| 一区二区三区亚洲| 在线观看国产日韩| 亚洲欧洲综合| 亚洲一区精品在线| 欧美在线视频一区二区| 久久综合久久综合久久综合| 免费影视亚洲| 欧美日韩精品免费观看视频完整| 国产精品久久久一区二区三区| 国产欧美精品一区二区色综合| 国外成人在线| 最新精品在线| 亚洲一区二区视频在线观看| 久久不射中文字幕| 欧美激情a∨在线视频播放| 欧美吻胸吃奶大尺度电影| 国产精品久久久久久久久久妞妞| 国产日韩欧美在线一区| 亚洲国产精品va在线观看黑人| av成人免费在线观看| 午夜精品一区二区三区电影天堂 | 欧美日韩国产成人| 国产精品久久久久久久久久ktv| 亚洲一区二区三区色| 亚洲欧美日韩在线| 久久国产色av| 欧美精品免费播放| 国产毛片精品视频| 亚洲国产小视频在线观看| 亚洲尤物在线| 蜜臀久久99精品久久久久久9 | 亚洲小说欧美另类社区| 久久久久9999亚洲精品| 欧美日韩国产三级| 欧美午夜激情视频| 伊人春色精品| 亚洲一区二区三区高清不卡| 噜噜噜噜噜久久久久久91| 欧美性jizz18性欧美| 在线精品国精品国产尤物884a| 亚洲婷婷免费| 欧美成年人视频网站| 国产精品在线看| 亚洲精品国产精品久久清纯直播 | 欧美大片91| 国产一区二区三区四区在线观看| 亚洲精品社区| 久久国产黑丝| 欧美午夜精品久久久| 亚洲国产欧美另类丝袜| 性色av一区二区三区在线观看| 欧美精品日本| 国产日韩欧美91| 亚洲欧洲精品一区二区三区不卡| 午夜精品美女自拍福到在线| 理论片一区二区在线| 国产精品手机视频| 99国产精品99久久久久久| 久久日韩粉嫩一区二区三区| 国产精品日韩欧美一区二区| 日韩视频一区| 麻豆精品在线视频| 韩国美女久久| 欧美亚洲视频一区二区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久 | 欧美中文字幕不卡| 国产精品色婷婷久久58| 夜夜爽99久久国产综合精品女不卡 | 国产日韩精品一区二区浪潮av| 日韩一区二区电影网| 欧美sm重口味系列视频在线观看| 国产日韩欧美91| 亚洲欧美国产77777| 国产精品99免费看| 99精品国产高清一区二区| 美女图片一区二区| 在线不卡亚洲| 久久免费少妇高潮久久精品99| 国产婷婷一区二区| 性欧美办公室18xxxxhd| 国产精品视频九色porn| 亚洲视频碰碰| 欧美丝袜第一区| 一本色道久久精品| 欧美日韩国产首页| 在线视频欧美一区| 欧美三级乱码| 亚洲午夜久久久| 国产精品人人爽人人做我的可爱| 亚洲无限乱码一二三四麻| 欧美日韩一区三区四区| 日韩午夜精品| 久久综合99re88久久爱| 在线观看亚洲精品| 蜜乳av另类精品一区二区| 亚洲电影欧美电影有声小说| 老巨人导航500精品| 亚洲国产精品v| 欧美成人性网| 日韩视频在线一区二区| 欧美日韩免费高清| 一区二区免费在线播放| 国产精品国产馆在线真实露脸| 亚洲一区二区黄| 国产精品一区免费视频| 中文av一区二区| 国产精品露脸自拍| 香蕉成人久久| 国内在线观看一区二区三区| 久久综合九色综合欧美狠狠| 91久久精品一区二区三区| 欧美日韩高清在线| 亚洲性图久久| 国产亚洲福利| 免费黄网站欧美| 99一区二区| 国产精品一区二区女厕厕| 久久av一区二区三区漫画| 黄色成人免费观看| 免费日韩av片| 洋洋av久久久久久久一区| 国产精品美女久久久浪潮软件| 欧美中在线观看| 激情婷婷欧美| 亚洲欧美激情视频| 韩国三级电影一区二区| 欧美高清日韩| 亚洲欧美三级在线| 极品av少妇一区二区| 欧美激情中文字幕一区二区| 中文精品视频一区二区在线观看| 国产美女精品人人做人人爽| 久久三级福利| 一区二区三区色| 国产女人18毛片水18精品| 美女黄色成人网| 99在线热播精品免费99热| 国产精品五月天| 免费成人黄色片| 亚洲一区免费| 极品日韩久久| 欧美视频在线免费看| 久久精品在线免费观看| 亚洲美女黄网| 国产日韩欧美在线观看| 欧美精品一区视频| 欧美在线亚洲一区| 亚洲精品久久久久久久久久久久久| 国产精品激情偷乱一区二区∴| 久久裸体艺术| 亚洲视频网在线直播| 黄色成人在线观看| 欧美日韩天天操| 久久久人成影片一区二区三区| 99ri日韩精品视频| 国模大胆一区二区三区| 欧美激情一区三区| 久久精品五月婷婷| 亚洲线精品一区二区三区八戒| 精品二区视频| 国产精品日韩欧美一区二区三区| 欧美成人按摩| 久久精品国产精品亚洲精品| 9l视频自拍蝌蚪9l视频成人| 极品少妇一区二区三区精品视频| 国产精品欧美一区喷水| 欧美激情网友自拍| 亚洲欧美另类中文字幕| 亚洲精品久久久久久久久久久| 国产亚洲观看| 欧美性事在线| 欧美国产专区| 久久婷婷蜜乳一本欲蜜臀| 亚洲在线观看免费| 亚洲精品之草原avav久久| 国产一区自拍视频| 国产精品美女主播| 欧美日韩国产色综合一二三四| 久久人人看视频| 欧美在线看片a免费观看| 中国成人亚色综合网站| 亚洲福利精品| 国产一区二区三区高清| 欧美日韩精品免费在线观看视频| 老牛影视一区二区三区| 久久伊人一区二区| 久久午夜精品| 麻豆成人在线播放| 欧美成人中文字幕| 欧美大胆a视频| 欧美日韩1080p| 欧美精品啪啪| 欧美日韩一区二区三区在线看 | 久久久久免费观看| 久久亚洲私人国产精品va|