Nginx?Rewrite及Location的使用與區(qū)別
一、Rewrite跳轉場景
URL看起來更規(guī)范、合理
企業(yè)會將動態(tài)URL地址偽裝成靜態(tài)地址提供服務
網址換新域名后,讓舊的訪問跳轉到新的域名上
服務端某些業(yè)務調整
ps:
URL:就是一個具體路徑/位置
URI:指的是一個擁有相同類型/特性的對象集合
URN:用名稱定位
二、Rewrite跳轉實現(xiàn)
通過ngx_http_rewrite_module這個模塊來實現(xiàn),而這個模塊內有四部分來組成:
Nignx:支持URL重寫、支持if條件判斷,但不支持else
跳轉:循環(huán)最多可以執(zhí)行10次,超過后nginx將返回500錯誤
PCRE支持:rewrite使用nginx全局變量或自己設置的變量,結合正則表達式和標志位實現(xiàn)URL重寫以及重定向
重寫 模塊:set指令
三、Rewrite實際場景
1.nginx跳轉需求的實現(xiàn)方式:
使用rewrite進行匹配跳轉
使用if匹配全局變量后跳轉
使用location匹配再跳轉
2.rewrite放在server{},if{},location{}段中
location只對域名后面的出去傳遞參數(shù)外的字符串起作用
3.對域名或參數(shù)字符串
使用if全局變量匹配
使用proxy_pass反向代理
四、Rewrite正則表達式
字符 | 說明 |
^ | 匹配輸入字符串的起始位置 |
& | 匹配輸入字符串的結束位置 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前面的字符一次或多次 |
? | 匹配前面的字符零次或一次 |
. | 匹配除“\n”之外的任何單個字符 |
\ | 將后面接著的字符標記為一個特殊字符或一個原義字符或一個向后引用 |
\d | 匹配純數(shù)字 |
{n} | 重復 n 次 |
{n,} | 重復 n 次或更多次 |
{n,m} | 重復 n 到 m 次 |
[ ] | 定義匹配的字符范圍 |
[c] | 匹配單個字符 c |
[a-z] | 匹配 a-z 小寫字母的任意一個 |
[a-zA-Z0-9] | 匹配所有大小寫字母或數(shù)字 |
( ) | 表達式的開始和結束位置 |
| | 或運算符 |
五、Rewrite命令/語法格式
flag標記說明
標記 | 說明 |
last | 相當于Apache的[L]標記,表示完成rewrite |
break | 本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則 |
redirect | 返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址,爬蟲不會更新URL |
permanent | 返回301永久重定向,瀏覽器地址會顯示跳轉后的URL地址,爬蟲更新URL |
last :在本條規(guī)則完成后,繼續(xù)向下匹配新的location URL規(guī)則,一般用在server和if當中
break :和last類似,但是不會重新發(fā)起一次處理過程,而是直接返回處理結果,一般用在location當中
redirect :該標記表示當前規(guī)則匹配成功后立即進行重定向操作(臨時)
permanent :該標記和redirect類似,永久性重定向
set :表示當前規(guī)則匹配成功后設置一個變量,并把變量傳入下一條規(guī)則
六、Location分類
1. location 大致可以分為三類:
精準匹配:location = / {...}
一般匹配:location / {...}
正則匹配:location ~ / {...}
2.location 常用的匹配規(guī)則:
標記 | 說明 |
= | 進行普通字符精確匹配,也就是完全匹配 |
^~ | 表示普通字符匹配,使用前綴匹配 |
~ | 區(qū)分大小寫的匹配 |
~* | 不區(qū)分大小寫的匹配 |
!~ | 區(qū)分大小寫的匹配取非 |
!~* | 不區(qū)分大小寫的匹配取非 |
@ | 定義一個命名的location,使用在內部定向時 |
七、Location優(yōu)先級
首先精確匹配 =
其次前綴匹配 ^~
其次是按文件中順序的正則匹配 ~或~*
然后匹配不帶任何修飾的前綴匹配
最后是交給 / 通用匹配
八、Rewrite和Location比較
1.相同點
都能實現(xiàn)跳轉
2.不同點
rewrite是在同一域名內更改獲取資源的路徑
location是對一類路徑做控制訪問或反向代理,還可以proxy_pass到其他機器
3.rewrite會寫在location里,執(zhí)行順序
執(zhí)行server塊里面的rewrite指令
執(zhí)行l(wèi)ocation匹配
執(zhí)行選定的location中的rewrite指令
九、跳轉小案例
基于域名的跳轉:
#修改配置文件
重啟服務
瀏覽器模擬訪問www.kgc.com會跳轉到www.benet.com
模擬訪問www.kgc.com/test會跳轉到www.benet.com/test,查看元素可以看到返回301,實現(xiàn)了永久重定向跳轉,而且域名后的參數(shù)也正常跳轉。
十、總結
1.優(yōu)先級總結:
(location = 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (location /)
2.location 匹配
首先看 優(yōu)先級:精確>前綴>正則>一般>通用
優(yōu)先級相同:正則看上下順序,上面的優(yōu)先;一般匹配看長度,最長匹配的優(yōu)先
精確、前綴、正則、一般 都沒有匹配到,最后再看通用匹配 一般匹配
3.rewrite和location比較
rewrite:改寫訪問的URL路徑 (被訪問的HTML/HTM/CSS文件)
location:對一類地址進行權限控制(認證控制)+ 跳轉(跨服務器進行URL跳轉)
4.實際網站使用中,至少有三個匹配規(guī)則定義:
第一個必選規(guī)則
直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理,比如說官網??梢允且粋€靜態(tài)首頁,也可以直接轉發(fā)給后端應用服務器
第二個必選規(guī)則
處理靜態(tài)文件請求,這是nginx作為http服務器的強項有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
第三個規(guī)則
通用規(guī)則,比如用來轉發(fā)帶.php、.jsp后綴的動態(tài)請求到后端應用服務器非靜態(tài)文件請求就默認是動態(tài)請求
到此這篇關于Nginx Rewrite及Location的使用與區(qū)別的文章就介紹到這了,更多相關Nginx Rewrite Location 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
shell腳本定時統(tǒng)計Nginx下access.log的PV并發(fā)送給API保存到數(shù)據(jù)庫
這篇文章主要介紹了shell腳本定時統(tǒng)計Nginx下access.log的PV并發(fā)送給API保存到數(shù)據(jù)庫的實現(xiàn)方法 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09