location塊的作用

2021-09-22 17:40:07 字數 2537 閱讀 2755

nginx 配置檔案,自下到上分為三種層次分明的結構:

nginx 允許使用者定義 location block ,並指定乙個匹配模式(pattern)匹配特定的 uri。除了簡單的字串(比如檔案系統路徑),還允許使用更為複雜的匹配模式(pattern)。

location block 的基本語法形式是:

location [=||

|^~|@] pattern

[=||

|^~|@] 被稱作 location modifier ,這會定義 nginx 如何去匹配其後的 pattern ,以及該 pattern 的最基本的屬性(簡單字串或正規表示式)。

------- 關於 location modifier -------

=這會完全匹配指定的 pattern ,且這裡的 pattern 被限制成簡單的字串,也就是說這裡不能使用正規表示式。

example:

server

}匹配情況:

# 正好完全匹配

# 如果執行 nginx server 的系統本身對大小寫不敏感,比如 windows ,那麼也匹配

?param1¶m2 # 忽略查詢串引數(query string arguments),這裡就是 /abcd 後面的 ?param1¶m2

/ # 不匹配,因為末尾存在反斜槓(trailing slash),nginx 不認為這種情況是完全匹配

e # 不匹配,因為不是完全匹配

(none)

可以不寫 location modifier ,nginx 仍然能去匹配 pattern 。這種情況下,匹配那些以指定的 patern 開頭的 uri,注意這裡的 uri 只能是普通字串,不能使用正規表示式。

example:

server

}匹配情況:

# 正好完全匹配

# 如果執行 nginx server 的系統本身對大小寫不敏感,比如 windows ,那麼也匹配

?param1¶m2 # 忽略查詢串引數(query string arguments),這裡就是 /abcd 後面的 ?param1¶m2

/ # 末尾存在反斜槓(trailing slash)也屬於匹配範圍內

e # 仍然匹配,因為 uri 是以 pattern 開頭的

~這個 location modifier 對大小寫敏感,且 pattern 須是正規表示式

example:

server

}匹配情況:

# 完全匹配

# 不匹配,~ 對大小寫是敏感的

?param1¶m2 # 忽略查詢串引數(query string arguments),這裡就是 /abcd 後面的 ?param1¶m2

/ # 不匹配,因為末尾存在反斜槓(trailing slash),並不匹配正規表示式 ^/abcd$

e # 不匹配正規表示式 ^/abcd$

注意:對於一些對大小寫不敏感的系統,比如 windows ,~ 和 ~* 都是不起作用的,這主要是作業系統的原因。

~*與 ~ 類似,但這個 location modifier 不區分大小寫,pattern 須是正規表示式

example:

server

}匹配情況:

# 完全匹配

# 匹配,這就是它不區分大小寫的特性

?param1¶m2 # 忽略查詢串引數(query string arguments),這裡就是 /abcd 後面的 ?param1¶m2

/ # 不匹配,因為末尾存在反斜槓(trailing slash),並不匹配正規表示式 ^/abcd$

e # 不匹配正規表示式 ^/abcd$

^~匹配情況類似 2. (none) 的情況,以指定匹配模式開頭的 uri 被匹配,不同的是,一旦匹配成功,那麼 nginx 就停止去尋找其他的 location 塊進行匹配了(與 location 匹配順序有關)

@用於定義乙個 location 塊,且該塊不能被外部 client 所訪問,只能被 nginx 內部配置指令所訪問,比如 try_files or error_page

------- 搜尋順序以及生效優先順序 -------

因為可以定義多個 location 塊,每個 location 塊可以有各自的 pattern 。因此就需要明白(不管是 nginx 還是你),當 nginx 收到乙個請求時,它是如何去匹配 uri 並找到合適的 location 的。

要注意的是,寫在配置檔案中每個 server 塊中的 location 塊的次序是不重要的,nginx 會按 location modifier 的優先順序來依次用 uri 去匹配 pattern ,順序如下:

1. =

2. (none) 如果 pattern 完全匹配 uri(不是只匹配 uri 的頭部)

3. ^~

4. ~ 或 ~*

5. (none) pattern 匹配 uri 的頭部

nginx學習之location塊

nginx官方文件中location塊的語法結構為 location uriuri 待匹配的字串,可以使不含正則表達的字串,如 myserver.php等 location模式 含義以 開頭 表示精準匹配,如只匹配根目錄結尾的請求,後面不能帶任何字串 以 開頭 表示uri以某個常規字串開頭,不是正則...

塊級作用域

跨級作用域本身沒有宣告可以說的,就需要注意兩點 1.跨級作用域內宣告的var變數並不會存在這個塊級作用域內,而是會提公升到非塊級作用域內 2.在塊級作用域內宣告function,在不同瀏覽器會有不同結果,如果是根據條件宣告function的話,請用var func function的形象 但是為什麼...

全域性作用域 塊級作用域

瀏覽器環境有一頂層物件window,window的屬性和var的全域性變數等價。如果用var設定了window物件的內建屬性作為變數,內建屬性值將會被覆蓋。如果是window物件的內建屬性,輸出預設值 非內建則輸出underfined。console.log window.name window.n...