location匹配的是nginx的哪個變數?
$request_uri
location的匹配種類有哪些?
格式 location [ 空格 | = | ~ | ~* |^~|!~ | !~* ] /uri/ {}
location搜尋順序
順序 no優先順序:(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)
1.首先匹配=
2.其次匹配^~
3.再其次按照配置檔案的順序進行正則匹配、
4.最後是交給/進行通用匹配
注意:當有匹配成功時,立刻停止匹配,按照當前匹配規則處理請求
舉例說明
( 這裡使用了 echo-nginx-module 模組,方便做輸出測試 )
精確匹配location = /images/test.png
location /images/test.png
location \/images\/test\.png$
如果此時請求 http:
會輸出什麼呢?
輸出 config1, 毋容置疑,精確匹配優先順序最高!
精確匹配的特殊情況location = /
location /
此時是輸入http:
會輸出什麼呢?
是輸出 config2, 怎麼精確匹配的優先順序不靈了呢?
是這樣的,精確匹配還是起作用了,請求目錄(非具體檔案),nginx會將請求內部定向到index檔案,
既此時真正的請求是http:
/index.html, 這是 config2則被命中!
所以精確匹配不要用來匹配 /
字串搜尋與正則搜尋location /images/test.png
location ^~ /images/
location ~ \/images\/test\.png$
location ~ \/images\/
如果此時請求 http:
會輸出什麼呢?
當然是 config3,正則命中
(雖然 config1 為最長匹配的字串,此時只做記錄,後面還要搜尋正則匹配,則config3正則匹配命中),
仔細觀察可以發現config4也被匹配成功了,但是正則的匹配順序是按照location的定義順序匹配的,所以config3命中.
字串匹配優先順序的提公升( ^~)location /images/
location ^~ /images/test.png
location ~ /images/test\.png$
location ~ \/images\/
如果此時請求 http:
會輸出什麼呢?
當然是config2, 首部匹配命中
(因為字串匹配是優先搜尋的,此時發現config2 為最長的字串匹配且為^~匹配方式,所以停止搜尋正則,直接命中!)
# 所以這裡的 ^~ 符號比較特殊,就是為了提高字串匹配的優先順序,優先於正則匹配.
精確完全匹配,即使/index.html也匹配不了
/downloads/download.html ->config b
匹配b以後,往下沒有任何匹配,採用b
/images/1.gif ->configuration d
匹配到f,往下匹配到d,停止往下
/images/abc/def ->config d
最長匹配到g,往下匹配d,停止往下
你可以看到 任何以/images/開頭的都會匹配到d並停止,fg寫在這裡是沒有任何意義的,h是永遠輪不到的,這裡只是為了說明匹配順序
/documents/document.html ->config c
匹配到c,往下沒有任何匹配,採用c
匹配到c,往下正則匹配到e
最長匹配到c,往下正則順序匹配到cc,不會往下到e
所以實際使用中,個人覺得至少有三個匹配規則定義,如下:#直接匹配**根,通過網域名稱訪問**首頁比較頻繁,使用這個會加速處理,官網如是說。
#這裡是直接**給後端應用伺服器了,也可以是乙個靜態首頁
#第乙個必選規則
location = /
#第二個必選規則是處理靜態檔案請求,這是nginx作為http伺服器的強項
#有兩種配置模式,目錄匹配或字尾匹配,任選其一或搭配使用
#第三個規則就是通用規則,用來**動態請求到後端應用伺服器
#非靜態檔案請求就預設是動態請求,自己根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp字尾的情況很少了
location /
Nginx配置基礎 location
location表示式型別 表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配。使用字首匹配。如果匹配成功,則不再匹配其他location。進行普通字元精確匹配。也就是完全匹配。常規字串匹配。按字首匹配。它定義乙個命名的 location,使用在內部定向時,例如 ...
nginx配置location總結
上 多的不說了,配了很多,終於起效了。對nginx 來說,實現的方法很簡單,只要在location段中,使用 expires 就可以了 格式expires 30s 表示把資料快取30秒 expires 30m 表示把資料快取30分 expires 10h 表示把資料快取10小時 expires 1d...
nginx配置命令 location配置
波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄。進行普通字元精確匹配。定義乙個命名的 location,使用在內部定向時,例如 error page,try files。按配置檔案順序搜尋下...