- 路由--Location的使用
- Location語法規則
語法規則: location [=|~|~*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中順序的正則匹配,最後是交給 /通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。
符號 |
含義 |
= |
= 開頭表示精確匹配 |
^~ |
^~開頭表示uri以某個常規字符串開頭,理解爲匹配 url路徑即可(禁止正則匹配)。 |
~ |
~ 開頭表示區分大小寫的正則匹配 |
~* |
~* 開頭表示不區分大小寫的正則匹配 |
!~和!~* |
!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配的正則 |
/ |
用戶所使用的代理(一般爲瀏覽器) |
匹配規則優先級如下:
- =精準匹配命中時,停止location動作,直接走精準匹配,
- 一般匹配(含非正則)命中時,先收集所有的普通匹配,最後對比出最長的那一條
- 如果最長的那一條普通匹配聲明爲非正則,直接此條匹配,停止location
- 如果最長的那一條普通匹配不是非正則,繼續往下走正則location
- 按代碼順序執行正則匹配,當第一條正則location命中時,停止location
- path匹配過程
假設http請求路徑爲
http://192.168.0.132:8088/mvc/index?id=2 ,匹配過程如下:
- 將整個url拆解爲域名/端口/path/params
- 先由域名/端口,對應到目標server虛擬主機
- path部分參與location匹配,path = path1匹配部分 + path2剩餘部分
- 進入location方法體內部流程。
- 若是靜態文件處理,則進入目標目錄查找文件:root指令時找path1+path2對應的文件;alias指令時找path2對應的文件
- 若是proxy代理,則形如proxy_pass=ip:port時轉發path1+path2路徑到tomcat;形如proxy_pass=ip:port/xxx時轉發path2路徑到tomcat。params始終跟隨轉發。
- rewrite使用:
rewrite regex replacement [flag];
flag=【break/last/redirect/permanent】
- regex 是正則表達式
- replacement 是替換值,新值
- flag -- 後續處理標識
- flag=break
發生nginx內部重定向,path值被更新,rewrite層面的命令會中斷。原控制流程邏輯不變往下走
- flag=last
發生nginx內部重定向,path值被更新,rewrite層面的命令會中斷。控制流程刷新,重新進行整個location層的邏輯流程。
- flag= redirect/permanent
發生頁面重定向(301永久重定向/302臨時重定向),nginx流程結束,返回http響應到瀏覽器,頁面url更新
- flag爲空
發生nginx內部重定向,path值被更新,rewrite層面的命令繼續。最後一個rewrite完畢,刷新控制流程,重新進行location重匹配