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