NGINX多階段處理

2021-06-27 15:43:14 字數 1276 閱讀 8040

nginx實際把請求處理流程劃分為了11個階段,這樣劃分的原因是將請求的執行邏輯細分,各階段按照處理時機定義了清晰的執行語義,開發者可以很容易分辨自己需要開發的模組應該定義在什麼階段,下面介紹一下各階段:

接收完請求頭之後的第乙個階段,它位於uri重寫之前,實際上很少有模組會註冊在該階段,預設的情況下,該階段被跳過;

server級別的uri重寫階段,也就是該階段執行處於server塊內,location塊外的重寫指令,前面的章節已經說明在讀取請求頭的過程中nginx會根據host及埠找到對應的虛擬主機配置;

尋找location配置階段,該階段使用重寫之後的uri來查詢對應的location,值得注意的是該階段可能會被執行多次,因為也可能有location級別的重寫指令;

location級別的uri重寫階段,該階段執行location基本的重寫指令,也可能會被執行多次;

location級別重寫的後一階段,用來檢查上階段是否有uri重寫,並根據結果跳轉到合適的階段;

訪問許可權控制的前一階段,該階段在許可權控制階段之前,一般也用於訪問控制,比如限制訪問頻率,鏈結數等;

訪問許可權控制階段,比如基於ip黑白名單的許可權控制,基於使用者名稱密碼的許可權控制等;

訪問許可權控制的後一階段,該階段根據許可權控制階段的執行結果進行相應處理;

try_files指令的處理階段,如果沒有配置try_files指令,則該階段被跳過;

內容生成階段,該階段產生響應,併發送到客戶端;

日誌記錄階段,該階段記錄訪問日誌;

Dockerfile多階段構建

多階段構建 之前的做法 在docker17.05版本之前,構建docker映象,通常採用兩種方式 1.全部放入乙個dockerfile 一種方式是將所有的構建過程全都包含在乙個dockerfile中,包括專案及其依賴庫的編譯 測試 打包流程,這裡會帶來的一些問題 映象層次多,映象體積較大,部署時間變...

spark多階段任務

import org.apache.spark.rdd.rdd val lines rdd string sc.parallelize list a b c a b d 3 切分壓平 val words rdd string lines.flatmap split 將單詞和1組合 val worda...

Docker多階段構建

在 docker 17.05 版本之前,我們構建 docker 映象時,通常會採用兩種方式 一種方式是將所有的構建過程編包含在乙個 dockerfile 中,包括專案及其依賴庫的編譯 測試 打包等流程,這裡可能會帶來的一些問題 package main import fmt func main 編寫...