一、 路由--Location的使用
9.1. Location語法規則
語法規則: location [=|~|~*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中順序的正則匹配,最后是交給 /通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。
符號 |
含義 |
= |
= 開頭表示精確匹配 |
^~ |
^~開頭表示uri以某個常規字符串開頭,理解為匹配 url路徑即可(禁止正則匹配)。 |
~ |
~ 開頭表示區分大小寫的正則匹配 |
~* |
~* 開頭表示不區分大小寫的正則匹配 |
!~和!~* |
!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配的正則 |
/ |
用戶所使用的代理(一般為瀏覽器) |
匹配規則優先級如下:
² =精准匹配命中時,停止location動作,直接走精准匹配,
² 一般匹配(含非正則)命中時,先收集所有的普通匹配,最后對比出最長的那一條
² 如果最長的那一條普通匹配聲明為非正則,直接此條匹配,停止location
² 如果最長的那一條普通匹配不是非正則,繼續往下走正則location
² 按代碼順序執行正則匹配,當第一條正則location命中時,停止location
9.2. 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始終跟隨轉發。