NGINX openrestry(指令的執行順序)
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(指令的執行順序)