Nginx location匹配規則

2022-01-19 21:57:49 字數 2917 閱讀 6193

location [=|~|~*|^~|@] /uri/
上述匹配規則的優先匹配順序:

= 字首的指令嚴格匹配這個查詢。如果找到,停止搜尋;

所有剩下的常規字串,最長的匹配。如果這個匹配使用 ^~ 字首,搜尋停止;

正規表示式,在配置檔案中定義的順序;

如果第 3 條規則產生匹配的話,結果被使用。否則,使用第 2 條規則的結果。

匹配到uri後,接下來要**到目標服務位址。

upstream api_server 

location /

location ^~ /my-module/

location /my-module/api

上述配置,預設訪問/會重定向到/my-module, 然後直接返回/data/my-module/dist下的html等靜態檔案。

訪問/my-module/api則會**到我們api伺服器位址,是乙個預設的round-robin負載均衡配置。

下面是訪問localhost的日誌, 訪問首頁一共進行了2次重定向。

request url: 

request method: get

status code: 302 moved temporarily

location: flash/

request url: flash/

request method: get

status code: 302 moved temporarily

location: flash/index.html

request url: flash/index.html

request method: get

status code: 304 not modified

root 實際訪問檔案路徑會拼接url中的路徑

alias 實際訪問檔案路徑不會拼接url中的路徑

示例如下:

location ^~ /sta/
請求:

實際訪問:/usr/local/nginx/html/static/sta1.html檔案

location ^~ /tea/
請求:

實際訪問:/usr/local/nginx/html/tea/tea1.html檔案

顯然,第二次重定向是不需要的,本意是訪問/flash/的時候,直接訪問對應目錄下的html靜態檔案。 但因為root拼接flash導致找不到對應檔案,要重寫url,去掉flash這個模組字首,使用了rewrite, 而rewrite會返回302重定向。

接下來,我們修改rootalias

location ^~ /flash/
直接重定向1次後返回html

request url: 

request method: get

status code: 302 moved temporarily

request url: flash/

request method: get

status code: 200 ok (from disk cache)

只用到了break,即匹配到此處後不會繼續跳。

我們常用的80埠轉443,即http轉https的一種配置方案為:

server $1 permanent; 

}

會返回301永久重定向到對應的https:

request url: 

request method: get

status code: 301 moved permanently

location: https://demo/flash/index.html

上述demo差不多就是我平時用的前後端分離的**配置方案。下面是一些遇到過的場景。

server
配置http重定向到https

server $1 permanent; 

}

server

}

配置靜態前端頁面

location /
配置反向**, 比如我們訪問我們想要**到 只切換了網域名稱,uri相同。

upstream api_server 

location /api

配置反向**時,移除字首。比如我們的服務 我們想要**到即切換網域名稱的同時,去掉users字首。區別是proxy_pass 結尾的/.

location ^~/users/
反向**時,想要自定義修改uri。使用rewrite正則修改。

# 修改uri,去掉了flash的字首,$1表示正則匹配到的字串內容。

location ^~ /flash/

# 修改uri, 重新**到新的位址

location ^~/order/

**跨域, 比如bing每日一圖,不支援我們ajax獲取位址,我們可以自己寫乙個支援的介面。

**物件為:

location ^~/proxy/bing/

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,不使用正規表示式,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error pag...

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error page,try fil...

nginx location匹配規則

location匹配命令 波浪線表示執行乙個正則匹配,區分大小寫 表示執行乙個正則匹配,不區分大小寫 表示普通字元匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄 進行普通字元精確匹配 定義乙個命名的 location,使用在內部定向時,例如 error page,try fil...