|
|
|
|
|
NGINX 服務(wù)器塊中的 location
指令允許將請(qǐng)求路由到文件系統(tǒng)中的正確位置。該指令用于告訴 NGINX 在哪里查找資源,方法是在將位置塊與 URL 匹配時(shí)包含文件和文件夾。在本教程中,我們將詳細(xì)了解 NGINX location
指令。
NGINX location 指令語(yǔ)法
NGINX location
塊可以放置在服務(wù)器塊內(nèi)或另一個(gè) location
塊內(nèi),但有一些限制。構(gòu)造 location
塊的語(yǔ)法是:
location [modifier] [URI] {
...
...
}
location
塊中的修飾符是可選的。在 location
塊中有一個(gè)修飾符將允許 NGINX 以不同的方式處理 URL。幾個(gè)最常見的修飾符是:
location
塊中沒有修飾符,則請(qǐng)求的 URI 將與請(qǐng)求的 URI 的開頭匹配。location
塊與請(qǐng)求的 URI 完全匹配。^
用于對(duì)請(qǐng)求的 URI 執(zhí)行最長(zhǎng)的非正則表達(dá)式匹配。如果請(qǐng)求的 URI 命中這樣的 location
塊,則不會(huì)發(fā)生進(jìn)一步的匹配。NGINX 如何選擇 location 塊
可以使用前綴字符串或使用正則表達(dá)式來定義 location
。不區(qū)分大小寫的正則表達(dá)式使用前面的“ ~*
”修飾符指定,對(duì)于不區(qū)分大小寫的正則表達(dá)式,使用“ ~
”修飾符。為了找到一個(gè) URI 的 location
匹配,NGINX 首先掃描使用前綴字符串(沒有正則表達(dá)式)定義的 location
。此后,正則表達(dá)式的 location
會(huì)按照它們?cè)谂渲梦募械穆暶黜樞蜻M(jìn)行檢查。NGINX 將運(yùn)行以下步驟來根據(jù)請(qǐng)求的 URI 選擇 location
塊。
location = /some/path/
指定的完全匹配,如果找到匹配,則立即提供此塊。location
塊,則 NGINX 繼續(xù)匹配最長(zhǎng)的非精確前綴,如果在使用 ^~
修飾符的 location
找到匹配項(xiàng),則 NGINX 將停止進(jìn)一步搜索并選擇此 location
塊來服務(wù)請(qǐng)求。location
不包含 ^~
修飾符,則臨時(shí)存儲(chǔ)匹配并繼續(xù)執(zhí)行以下步驟。~
和 ~*
修飾符的 location
塊,并選擇與請(qǐng)求 URI 匹配的第一個(gè) location
塊,并立即選擇為請(qǐng)求提供服務(wù)。location
,則使用先前存儲(chǔ)的前綴 location
來為請(qǐng)求提供服務(wù)。NGINX location 塊示例
讓我們列出幾個(gè)使用修飾符和 URI 的 NGINX location
塊示例。
1、匹配所有請(qǐng)求的NGINX位置
在以下示例中,前綴位置 /
將匹配所有請(qǐng)求,但如果未找到匹配項(xiàng),將用作最后的手段。
location / {
...
}
2、NGINX 位置匹配準(zhǔn)確的 URL
NGINX 總是首先嘗試匹配最具體的前綴位置。因此,以下位置塊中的等號(hào)強(qiáng)制與請(qǐng)求的路徑完全匹配,然后停止搜索更多匹配項(xiàng)。
location = /images {
...
}
上面的 location
塊將與 URL https://domain.com/images
匹配,但 URL https://domain.com/images/index.html
或 https://domain.com/images/
不會(huì)匹配。
3、目錄的 NGINX 位置塊
以下位置塊將匹配任何以 /images/
開頭的請(qǐng)求,但會(huì)繼續(xù)為所請(qǐng)求的 URI 搜索更具體的塊。因此,如果 NGINX 沒有找到任何更具體的匹配,則將選擇位置塊。
location /images/ {
...
...
}
4、NGINX 位置正則表達(dá)式示例
以下位置塊中的修飾符^~
導(dǎo)致區(qū)分大小寫的正則表達(dá)式匹配。因此,URI /images
或 /images/logo.png
將被匹配,但一旦找到匹配項(xiàng)就會(huì)停止搜索。
location ^~ /images {
...
...
}
5、image/css/js 文件類型的 NGINX 位置塊
下一個(gè)位置塊中的修飾符~*
匹配任何以 png、ico、gif、jpg、jpeg、css 或 js 結(jié)尾的請(qǐng)求(不區(qū)分大小寫)。但是,對(duì)文件夾/images/
的任何請(qǐng)求都將由先前的位置塊提供服務(wù)。
location ~* .(png|ico|gif|jpg|jpeg|css|js)$ {
...
...
}
6、NGINX 位置 RegEx 區(qū)分大小寫匹配
以下位置塊中的修飾符~
會(huì)導(dǎo)致區(qū)分大小寫的正則表達(dá)式匹配,但不會(huì)停止搜索更好的匹配。
location ~ /images {
...
...
}
7、NGINX 位置正則表達(dá)式不區(qū)分大小寫匹配示例
以下位置塊中的修飾符~*
會(huì)導(dǎo)致不區(qū)分大小寫的正則表達(dá)式匹配,但搜索不會(huì)在此處停止以獲得更好的匹配。
location ~* /images {
...
...
}
總結(jié)
了解 NGINX location
指令對(duì)于跟蹤文件系統(tǒng)中請(qǐng)求的 URI 的端點(diǎn)至關(guān)重要。本文中討論的修飾符、選擇位置塊的步驟和一些示例將幫助你輕松開始在 NGINX 中使用 location
塊。
相關(guān)文章