1. 程式人生 > >NGINX openrestry(指令的執行順序)

NGINX openrestry(指令的執行順序)

var efi div 行處理 目錄 直接 input 請求 找到

Nginx的指令的執行順序:

一、post-read

二、server-rewrite

  ngx_rewrite模塊的set指令和rewrite指令(前提在server裏面配置時)

三、find-config

四、rewrite

  ngx_rewrite模塊的set指令和rewrite指令(前提在location裏面配置時)

  ngx_set_misc模塊的set_unescape_uri指令

  ngx_lua模塊的set_by_lua指令

  rewrite tail:

  ngx_headers_more模塊的more_set_input_headers指令

  ngx_lua模塊的rewrite_by_lua指令

五、post-rewrite

六、preaccess

七、access

  ngx_access模塊的allow指令和deny指令(多個指令會按順序進行執行)

  如果首先匹配的指令是 allow,則會繼續執行後續其他模塊的指令或者跳到後續的處理階段;而如果首先滿足的是 deny 則會立即中止當前整個請求的處理,並立即返回 403 錯誤頁。

  access tail:

  ngx_lua模塊的access_by_lua指令

  tips:指令中return表示該指令就是,繼續執行後續的指令。

  tips:ngx_lua模塊的ngx.exit(403)函數,直接結束整個請求處理過程,返回403頁面。

八、post-access

九、try-files

十、content階段:

  這個階段的這麽多的指令只能有一種勝出。每一個location只能有一個內容處理程序。

  執行的順序是:如果1裏面有就從裏面選擇一個執行,如果1裏面沒有就讓2執行,如果2沒有或者處理不了就讓3執行,如果3沒有或者處理不了就讓4執行。

1、ngx_echo模塊的echo指令、echo_exec指令、echo_location指令

  ngx_proxy模塊的proxy_pass指令

  ngx_lua模塊的content_by_lua指令

  用一種指令有的可以寫幾次,比如echo。

location /test {
  echo hello;
  echo world;
}

  ngx_lua模塊的ngx.say函數和ngx_echo模塊的echo函數是一樣的

location /test {
  content_by_lua ngx.say("hello") ngx.say("world");
}

2、ngx_index模塊的index指令:

  處理以‘/‘結尾的請求

location / {
  root /var/www/;
  index index.htm index.html;
}

  當用戶請求‘/‘地址時,Nginx會自動在/var/www/index.htm目錄下尋找這個文件,如果找到,則直接發起內部跳轉到新的‘/index.html‘這個新的地址,如果不存在,則繼續找/var/www/index.html這個文件,如果找得到,則直接發起內部跳轉到‘/index.html‘這個地址,如果不存在,就交給後續的模塊進行處理,如果都處理不了,就報403的錯誤。

內部跳轉:

  ngx_index模塊的index指令

  echo模塊的echo_exec指令

  ngx_rewrite模塊的rewrite指令

3、ngx_autoindex模塊的autoindex指令:

  處理以‘/‘結尾的請求

  自動生成目錄索引頁

location / {
root /var/www/;
index index.html;
autoindex on;
}

  當請求到來時,當/var/www/index.html的頁面不存在時,會顯示/var/www/下的文件目錄列表;當index.html的存在時,會優先執行ngx_index模塊的index指令,直接發生內部跳轉。

4、ngx_static模塊的靜態資源指令:

  處理不以‘/‘結尾的網頁

  專門用來處理和輸出靜態資源內容的

location / {
}

  因為沒有配置 root 指令,所以在訪問這個接口時,Nginx 會自動計算出一個缺省的“文檔根目錄”。該缺省值是取所謂的“配置前綴 prefix路徑下的 html/ 子目錄。舉一個例子,假設配置前綴是 /foo/bar/,則缺省的“文檔根目錄”便是 /foo/bar/html/。

  當靜態資源找不到時會出現404錯誤。404是指靜態資源找不到,而並非location找不到。

十一、log

http頭部

輸出過濾器

內部跳轉

NGINX openrestry(指令的執行順序)