Nginx 中的地址(location)
語法: location [=|~|~*|^~|@] /uri/ { ... }
默認值: no
上下文: server
location可以配置依賴于URI的請求,根據不同的規則將請求轉發到相應的后端服務器上。location的path規則支持正則表達式。 為了使用正則表達式,必須使用下面的匹配符:
- ~* 不區分大小寫的正則表達式
- ~ 區分大小寫的正則表達式
匹配的規則是優先使用常量字符串(非正則表達式),如果任何一個常量字符串匹配就停止匹配,返回匹配的結果。如果常量字符串不匹配就匹配正則表達式,找到第一個匹配的正則表達式規則就停止匹配,返回匹配的結果。如果正則表達式也不匹配就匹配URL的PATH(一級一級往上匹配,最終到/)。
"="僅僅匹配URI完全一樣的地址。顯然正則表達式的匹配速度是慢于字符串的直接匹配的,所以如果一個地址是頻繁訪問的話,使用"="可以提高匹配的速度。
任何一條不使用 "=" 或者 "^~" 前綴的常量字符串規則匹配就立即停止終止匹配。 小結,匹配規則如下:
- 匹配"="的規則,如果完全匹配,終止匹配。
- 匹配普通字符串,如果匹配帶有"^~"前綴的,終止匹配。
- 匹配正則表達式,匹配的順序按照配置文件中的定義順序。
- 如果規則3匹配一個結果就終止匹配,否則使用規則2中的結果。
特別強調的是,nginx不匹配編碼后的字符串,比如"/images/%20/test"中帶有一個空格,那么必須使用"/images/ /test"才能匹配,而不是使用編碼后的字符。
下面是一個例子。
location = / {
#僅僅匹配地址"/"
[規則A]
}
location / {
# 匹配任何一個以"/"開頭的地址,所以說基本上匹配所有地址,但是正則表達式可能優先于此匹配。
[規則B]
}
location ^~ /images/ {
# 匹配任何以"/images"開頭的地址,此匹配規則要優先于正則表達式。
[規則C]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以"gif", "jpg", 或者".jpeg"結尾的地址。但是"/images/"目錄中的文件會被規則C優先匹配。
[規則D]
}
例如下面一些請求:
/ -> 規則A
/documents/document.html -> 規則B
/images/1.gif -> 規則C
/documents/1.jpg -> 規則D
四種規則可以以任何順序在配置文件中定義,同一條規則多條正則表達式匹配時,依賴其在配置文件中的順序。另外,嵌套的location可能導致未知的匹配結果。
另外,前綴"@" 比較特別,用來處理錯誤頁面和嘗試頁面(多頁面時順序匹配規則)。
©2009-2014 IMXYLZ
|求賢若渴