技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

nginx.conf location 修飾符解釋及示例詳解

作者:admin    時(shí)間:2022-9-6 19:39:51    瀏覽:

NGINX 服務(wù)器塊中的 location 指令允許將請(qǐng)求路由到文件系統(tǒng)中的正確位置。該指令用于告訴 NGINX 在哪里查找資源,方法是在將位置塊與 URL 匹配時(shí)包含文件和文件夾。在本教程中,我們將詳細(xì)了解 NGINX location 指令。

nginx.conf 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è)最常見(jiàn)的修飾符是:

  • none:如果 location 塊中沒(méi)有修飾符,則請(qǐng)求的 URI 將與請(qǐng)求的 URI 的開(kāi)頭匹配。
  • =:等號(hào)用于將 location 塊與請(qǐng)求的 URI 完全匹配。
  • ~:波浪號(hào)用于區(qū)分大小寫(xiě)的正則表達(dá)式匹配請(qǐng)求的 URI。
  • ~*:波浪號(hào)后跟星號(hào)用于對(duì)請(qǐng)求的 URI 進(jìn)行不區(qū)分大小寫(xiě)的正則表達(dá)式匹配。
  • ^~:后跟波浪號(hào)的^用于對(duì)請(qǐng)求的 URI 執(zhí)行最長(zhǎng)的非正則表達(dá)式匹配。如果請(qǐng)求的 URI 命中這樣的 location 塊,則不會(huì)發(fā)生進(jìn)一步的匹配。

NGINX 如何選擇 location 塊

可以使用前綴字符串或使用正則表達(dá)式來(lái)定義 location。不區(qū)分大小寫(xiě)的正則表達(dá)式使用前面的“ ~* ”修飾符指定,對(duì)于不區(qū)分大小寫(xiě)的正則表達(dá)式,使用“ ~ ”修飾符。為了找到一個(gè) URI 的 location 匹配,NGINX 首先掃描使用前綴字符串(沒(méi)有正則表達(dá)式)定義的 location。此后,正則表達(dá)式的 location 會(huì)按照它們?cè)谂渲梦募械穆暶黜樞蜻M(jìn)行檢查。NGINX 將運(yùn)行以下步驟來(lái)根據(jù)請(qǐng)求的 URI 選擇 location 塊。

  • NGINX 首先尋找與 location = /some/path/ 指定的完全匹配,如果找到匹配,則立即提供此塊。
  • 如果沒(méi)有這樣的精確 location 塊,則 NGINX 繼續(xù)匹配最長(zhǎng)的非精確前綴,如果在使用 ^~ 修飾符的 location 找到匹配項(xiàng),則 NGINX 將停止進(jìn)一步搜索并選擇此 location 塊來(lái)服務(wù)請(qǐng)求。
  • 如果匹配的最長(zhǎng)前綴 location 不包含 ^~ 修飾符,則臨時(shí)存儲(chǔ)匹配并繼續(xù)執(zhí)行以下步驟。
  • NGINX 現(xiàn)在將搜索轉(zhuǎn)移到包含 ~~* 修飾符的 location 塊,并選擇與請(qǐng)求 URI 匹配的第一個(gè) location 塊,并立即選擇為請(qǐng)求提供服務(wù)。
  • 如果在上述步驟中沒(méi)有找到可以與請(qǐng)求的 URI 匹配的 location,則使用先前存儲(chǔ)的前綴 location 來(lái)為請(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.htmlhttps://domain.com/images/ 不會(huì)匹配。

3、目錄的 NGINX 位置塊

以下位置塊將匹配任何以 /images/ 開(kāi)頭的請(qǐng)求,但會(huì)繼續(xù)為所請(qǐng)求的 URI 搜索更具體的塊。因此,如果 NGINX 沒(méi)有找到任何更具體的匹配,則將選擇位置塊。

location /images/ {
     ...
     ...
}

4、NGINX 位置正則表達(dá)式示例

以下位置塊中的修飾符^~導(dǎo)致區(qū)分大小寫(xiě)的正則表達(dá)式匹配。因此,URI /images/images/logo.png 將被匹配,但一旦找到匹配項(xiàng)就會(huì)停止搜索。

location ^~ /images {
   ...
   ...
}

5、image/css/js 文件類(lèi)型的 NGINX 位置塊

下一個(gè)位置塊中的修飾符~*匹配任何以 png、ico、gif、jpg、jpeg、css 或 js 結(jié)尾的請(qǐng)求(不區(qū)分大小寫(xiě))。但是,對(duì)文件夾/images/的任何請(qǐng)求都將由先前的位置塊提供服務(wù)。

location ~* .(png|ico|gif|jpg|jpeg|css|js)$ {
    ...
    ...
}

6、NGINX 位置 RegEx 區(qū)分大小寫(xiě)匹配

以下位置塊中的修飾符~會(huì)導(dǎo)致區(qū)分大小寫(xiě)的正則表達(dá)式匹配,但不會(huì)停止搜索更好的匹配。

location ~ /images {
    ...
    ...
}

7、NGINX 位置正則表達(dá)式不區(qū)分大小寫(xiě)匹配示例

以下位置塊中的修飾符~*會(huì)導(dǎo)致不區(qū)分大小寫(xiě)的正則表達(dá)式匹配,但搜索不會(huì)在此處停止以獲得更好的匹配。

location ~* /images {
     ...
     ...
}

總結(jié)

了解 NGINX location 指令對(duì)于跟蹤文件系統(tǒng)中請(qǐng)求的 URI 的端點(diǎn)至關(guān)重要。本文中討論的修飾符、選擇位置塊的步驟和一些示例將幫助你輕松開(kāi)始在 NGINX 中使用 location 塊。

相關(guān)文章

標(biāo)簽: nginx  location  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */