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重定向。
接下來,我們修改root
為alias
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...