rewrite與location Nginx重寫功能

一、常用的Nginx 正則表達式

rewrite與location Nginx重寫功能

文章插圖
二、訪問路由location2.1location的分類location 大致可以分為三類:
  • 精準匹配:location = / {}
  • 一般匹配:location / {}
  • 正則匹配:location ~ / {}
2.2location 常用的匹配規則
rewrite與location Nginx重寫功能

文章插圖
2.3location 優先級
  • 首先精確匹配 =
  • 其次前綴匹配 ^~
  • 其次是按文件中順序的正則匹配 或*
  • 然后匹配不帶任何修飾的前綴匹配
  • 最后是交給 / 通用匹配
2.4location 示例說明(1)location = / {}=為精確匹配 / ,主機名后面不能帶任何字符串,比如訪問 / 和 /data , 則 / 匹配,/data 不匹配,再比如 location = /abc,則只匹配/abc ,/abc/或 /abcd不匹配 。若 location /abc,則即匹配/abc 、/abcd/ 同時也匹配 /abc/ 。(2)location / {}因為所有的地址都以 / 開頭,所以這條規則將匹配到所有請求 比如訪問 / 和 /data, 則 / 匹配,/data 也匹配,但若后面是正則表達式會和最長字符串優先匹配(最長匹配)(3)location /documents/ {}匹配任何以 /documents/ 開頭的地址,匹配符合以后,還要繼續往下搜索其它 location,只有其它 location后面的正則表達式沒有匹配到時 , 才會采用這一條(4)location /documents/abc {}匹配任何以 /documents/abc 開頭的地址,匹配符合以后,還要繼續往下搜索其它 location , 只有其它 location后面的正則表達式沒有匹配到時,才會采用這一條(5)location ^~ /images/ {}匹配任何以 /images/ 開頭的地址,匹配符合以后,停止往下搜索正則 , 采用這一條(6)location ~* .(gif|jpg|jpeg)$ {}匹配所有以 gif、jpg或jpeg 結尾的請求,然而,所有請求 /images/ 下的圖片會被 location ^~ /images/ 處理,因為 ^~ 的優先級更高 , 所以到達不了這一條正則(7)location /images/abc {}最長字符匹配到 /images/abc , 優先級最低,繼續往下搜索其它 location,會發現 ^~ 和 ~ 存在(8)location ~ /images/abc {}匹配以/images/abc 開頭的,優先級次之,只有去掉 location ^~ /images/ 才會采用這一條(9)location /images/abc/1.html {}匹配/images/abc/1.html 文件,如果和正則 ~ /images/abc/1.html 相比 , 正則優先級更高
優先級總結:(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ,* 正則順序) > (location 部分起始路徑) > (location /)location匹配首先看優先級:精確>前綴>正則>一般>通用優先級相同:正則看上下順序,上面的優先;一般則看長度,最長匹配優先精確、前綴、正則、一般都沒有匹配到就看通用
2.5實際網站使用中的三個匹配規則定義2.5.1 第一個必選規則
直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理,比如說官網 。這里是直接轉發給后端應用服務器了,也可以是一個靜態首頁 。
location = / {    proxy_pass http://tomcat_server/;}2.5.2 第二個必選規則是處理靜態文件請求
這是nginx作為http服務器的強項!有兩種配置模式,目錄匹配或后綴匹配,任何其一或搭配使用 。
location ^~ /static/ {    root /webroot/static/;}location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {    root /webroot/res/;}2.5.3 第三個規則就是通用規則
比如用來轉發帶.php、.jsp后綴的動態請求到后端應用服務器 。非靜態文件請求就默認是動態請求 。
location / {    proxy_pass http://tomcat_server;} 三、訪問重新rewrite3.1rewrite的概述rewrite功能就是 , 使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標志位實現url重寫以及重定向 。rewrite只能放在server{},location{},if{}中,并且默認只能對域名后邊的除去傳遞的參數外的字符串起作用 。
例如:http://www.fzr.com/zzj/index.php?id=1&u=str 只對/zzj/index.php重寫 。
3.2rewrite 執行順序如下(1) 執行 server 塊里面的 rewrite 指令(2) 執行 location 匹配(3) 執行選定的 location 中的 rewrite 指令語法: rewrite [flag];
  • regex :表示正則匹配規則
  • replacement :表示跳轉后的內容
  • flag :表示 rewrite 支持的 flag 標記
###flag標記說明###