nginx--路由--Location的使用

  • 路由--Location的使用
  1. Location語法規則

語法規則: location [=|~|~*|^~] /uri/ {… }

首先匹配 =,其次匹配^~,其次是按文件中順序的正則匹配,最後是交給 /通用匹配。當有匹配成功時候,停止匹配,按當前匹配規則處理請求。

符號

含義

=

= 開頭表示精確匹配

^~

^~開頭表示uri以某個常規字符串開頭,理解爲匹配 url路徑即可(禁止正則匹配)。

~

~ 開頭表示區分大小寫的正則匹配

~*

~* 開頭表示不區分大小寫的正則匹配

!~和!~*

!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配的正則

/

用戶所使用的代理(一般爲瀏覽器)

 

匹配規則優先級如下:

 

  • =精準匹配命中時,停止location動作,直接走精準匹配,
  • 一般匹配(含非正則)命中時,先收集所有的普通匹配,最後對比出最長的那一條
  • 如果最長的那一條普通匹配聲明爲非正則,直接此條匹配,停止location
  • 如果最長的那一條普通匹配不是非正則,繼續往下走正則location
  • 按代碼順序執行正則匹配,當第一條正則location命中時,停止location

 

  1. 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 -- 後續處理標識
  1. flag=break

發生nginx內部重定向,path值被更新,rewrite層面的命令會中斷。原控制流程邏輯不變往下走

  1. flag=last

發生nginx內部重定向,path值被更新,rewrite層面的命令會中斷。控制流程刷新,重新進行整個location層的邏輯流程。

  1. flag= redirect/permanent

發生頁面重定向(301永久重定向/302臨時重定向),nginx流程結束,返回http響應到瀏覽器,頁面url更新

  1. flag爲空

發生nginx內部重定向,path值被更新,rewrite層面的命令繼續。最後一個rewrite完畢,刷新控制流程,重新進行location重匹配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章