Nginx中l(wèi)ocation匹配以及rewrite重寫(xiě)跳轉(zhuǎn)詳解
前言
rewrite功能就是使用nginx提供的全局變量或自己設(shè)置的變量,結(jié)合正則表達(dá)式和標(biāo)記實(shí)現(xiàn)URL重寫(xiě)以及重定向
例如:更換域名后需要保持舊的域名能夠轉(zhuǎn)到新的域名上、某網(wǎng)頁(yè)發(fā)生改變需要跳轉(zhuǎn)到新的頁(yè)面、網(wǎng)站防盜鏈等等需求
rewrite只能放在server{},location{},if{}中,并且默認(rèn)只能對(duì)域名后面的除去傳遞的參數(shù)外的字符串起作用
例如:http://www.xjj.com/a/we/index.php?id=1&u=str 只對(duì)/a/we/index.php重寫(xiě)
一、rewrite跳轉(zhuǎn)實(shí)現(xiàn)
Nginx:通過(guò)ngx_http_rewrite_module模塊支持URL重寫(xiě)、支持if條件判斷,但不支持else
跳轉(zhuǎn):從一個(gè)location跳轉(zhuǎn)到另一個(gè)location,循環(huán)最多可以執(zhí)行10次,超過(guò)后nginx將返回500錯(cuò)誤
PCRE支持:perl兼容正則表達(dá)式的語(yǔ)法規(guī)則匹配
重寫(xiě)模塊set指令:創(chuàng)建新的變量并為其賦值
二、rewrite執(zhí)行順序
①執(zhí)行server快里面的rewriter指令
②執(zhí)行l(wèi)ocation匹配
③執(zhí)行選定的location中的rewrite指令
三、rewrite跳轉(zhuǎn)場(chǎng)景
調(diào)整用戶瀏覽的URL,看起來(lái)更規(guī)范,合乎開(kāi)發(fā)及產(chǎn)品人員的需求
為了讓搜索引擎搜錄網(wǎng)站內(nèi)容及用戶體驗(yàn)更好,企業(yè)會(huì)將動(dòng)態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù)
網(wǎng)址換新域名后,讓舊的訪問(wèn)跳轉(zhuǎn)到新的域名上;例如,訪問(wèn)京東的 360buy.com 會(huì)跳轉(zhuǎn)到 jd.com
服務(wù)端某些業(yè)務(wù)調(diào)整,比如根據(jù)特殊變量、目錄、客戶端的信息進(jìn)行URL調(diào)整等
四、語(yǔ)法與flg標(biāo)記說(shuō)明
語(yǔ)法rewrite <regex> <replacement> [flag];
regex:表示正則匹配規(guī)則
replacement:表示跳轉(zhuǎn)后的內(nèi)容
flag:表示 rewrite 支持的 flag 標(biāo)記
flag標(biāo)記說(shuō)明:
- last :本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location URI規(guī)則,一般用在 server 和 if 中
- break :本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則,一般使用在 location 中
- redirect :返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址
- permanent :返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址
五、Nginx常用的正則表達(dá)式符號(hào)
六、location
1.分類
location大致可以分為以下三類:
- 精準(zhǔn)匹配:location = / {…}
- 一般匹配:location / {…}
- 正則匹配:location ~ / {…}
2.常用匹配規(guī)則
3.優(yōu)先級(jí)
- 首先精準(zhǔn)匹配 =
- 其次前綴匹配 ^~
- 其次是按文件中順序的正則匹配 ~ 或 ~*
- 然后是匹配不帶任何修飾的前綴匹配,即一般匹配
- 最后交給 / 通用匹配,優(yōu)先級(jí)最低
4.示例
localtion = / {}
=為精準(zhǔn)匹配 /,主機(jī)名后面不能帶任何字符串,比如訪問(wèn) / 和 /xcf,則 / 匹配,/xcf 不匹配
location / {}
因?yàn)樗械牡刂范家?/ 開(kāi)頭,所以這條規(guī)則將匹配到所有的請(qǐng)求,比如訪問(wèn) / 和 /data,則 / 匹配,/data也匹配
但若后面是正則表達(dá)式,則會(huì)和最長(zhǎng)字符串優(yōu)先匹配(最長(zhǎng)匹配)
location /documents/ {}
匹配任何以 /documents/ 開(kāi)頭的地址,匹配符合以后,還要繼續(xù)往下搜索其它 location
location /documents/abc {}
匹配任何以 /documents/abc 開(kāi)頭的地址,匹配符合后,還要繼續(xù)往下搜索其他 location
只有其他 location 后面的正則表達(dá)式?jīng)]有匹配到時(shí),才會(huì)采用這一條
location ^~ /images/ {}
匹配任何以 /images/ 開(kāi)頭的地址,匹配符合以后,停止往下搜索正則,并采用這條
location ~* .(gif|jpg|jpeg)$ {}
匹配所有以 gif、jpg、jpeg 為結(jié)尾的請(qǐng)求
然而,所有請(qǐng)求 /images/ 下的圖片會(huì)被 location ^~ /images/ 處理,因?yàn)?^~ 的優(yōu)先級(jí)更高,所以到達(dá)不了這一條正則
location /images/abc {}
最長(zhǎng)字符匹配到 /images/abc,優(yōu)先級(jí)最低,繼續(xù)往下搜索其它 location,會(huì)發(fā)現(xiàn) ^~ 和 ~ 存在
location ~ /images/abc {}
匹配以 /images/abc 開(kāi)頭的,優(yōu)先級(jí)次之,只有去掉 location ^~ /images 才會(huì)采用這一條
location /images/abc/1.html {}
匹配 /images/abc/1.html 文件,如果和正則 ~ /images/abc/1.html 相比,正則優(yōu)先級(jí)更高
優(yōu)先級(jí)總結(jié):
(location = 完整路徑) > (location ^~ 路徑) > (location ,* 正則順序) > (location 部分起始路徑) > (location /)
5.匹配規(guī)則定義
①第一個(gè)必選規(guī)則:
直接匹配網(wǎng)站根,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,比如說(shuō)官網(wǎng)
可以是一個(gè)靜態(tài)首頁(yè),也可以直接轉(zhuǎn)發(fā)給后端“應(yīng)用服務(wù)器”——>PHP、Apache(應(yīng)用服務(wù)器如下圖所示)
location / { root html; index index.html index.html; }
②第二個(gè)必選規(guī)則:
處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng)(①靜態(tài)請(qǐng)求處理的能力②高并發(fā)處理能力③資源消耗較低)
有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用
location ^~ /static/ { root /webroot/static/; } location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/ ; }
③第三個(gè)必選規(guī)則:
就是通用規(guī)則,比如用來(lái)轉(zhuǎn)發(fā)帶.php、.jsp后綴的動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器
非靜態(tài)文件請(qǐng)求就默認(rèn)是動(dòng)態(tài)請(qǐng)求(跳轉(zhuǎn)/反向代理)
upstream tomcat_server { 192.168.126.12:80 192.168.126.23:80 }
location / { proxy_ pass http://tomcat_server;
總結(jié):
1.比較rewrite和location
相同點(diǎn):都實(shí)現(xiàn)跳轉(zhuǎn)
不同點(diǎn):rewrite是在同一域名內(nèi)更改獲取資源的路徑
location是對(duì)一類路徑做控制訪問(wèn)或反向代理,還可以proxy_pass到其他機(jī)器
2.rewrite會(huì)寫(xiě)在location里,執(zhí)行順序
- 執(zhí)行server塊里面的rewrite指令
- 執(zhí)行l(wèi)ocation匹配
- 執(zhí)行選定的location中的rewrite指令
3.location優(yōu)先級(jí)是怎么排列的?
匹配某個(gè)具體文件
(location = 完整路徑) > (location ^~ 完整路徑) > (location ~* 完整路徑) > (location ~ 完整路徑)> (location /)
用目錄做匹配訪問(wèn)某個(gè)文件
(location = 目錄) > (location ^~ 目錄) > (location ~ 目錄) > (location ~* 目錄)> (location /)
4.文件、目錄為什么只會(huì)在區(qū)不區(qū)分大小寫(xiě)上會(huì)有變動(dòng)
正則表達(dá)式:目的是為了盡量精確的匹配
文件——>盡量精確匹配,區(qū)分大小寫(xiě) 精確,不區(qū)分更為精確
目錄——>盡量精確匹配,區(qū)分大小寫(xiě) 更為精確,優(yōu)先級(jí)更高
到此這篇關(guān)于Nginx中l(wèi)ocation匹配以及rewrite重寫(xiě)跳轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Nginx location匹配及rewrite重寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx反向代理及負(fù)載均衡如何實(shí)現(xiàn)(基于linux)
這篇文章主要介紹了Nginx反向代理及負(fù)載均衡如何實(shí)現(xiàn)(基于linux),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09windows下nginx的安裝使用及解決80端口被占用nginx不能啟動(dòng)的問(wèn)題
這篇文章主要給大家介紹了關(guān)于windows下nginx的安裝使用,以及如何解決80端口被占用導(dǎo)致nginx不能啟動(dòng)的問(wèn)題,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04nginx配置ssl實(shí)現(xiàn)https訪問(wèn)的步驟(適合新手)
這篇文章主要給大家介紹了關(guān)于nginx配置ssl實(shí)現(xiàn)https訪問(wèn)的相關(guān)資料,這個(gè)教程非常適合新手小白,文中通過(guò)示例代碼將實(shí)現(xiàn)的方法一步步介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧2018-12-12nginx反向代理配置400,404,502等狀態(tài)的自定義頁(yè)面問(wèn)題
這篇文章主要介紹了nginx反向代理配置400,404,502等狀態(tài)的自定義頁(yè)面問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01編寫(xiě)Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法
這篇文章主要介紹了編寫(xiě)Go程序?qū)ginx服務(wù)器進(jìn)行性能測(cè)試的方法,包括對(duì)其負(fù)載均衡和緩存等方面的測(cè)試,極力推薦!需要的朋友可以參考下2015-06-06nginx 流量控制以及訪問(wèn)控制的實(shí)現(xiàn)
這篇文章主要介紹了nginx 流量控制以及訪問(wèn)控制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08nginx反向代理服務(wù)因配置文件錯(cuò)誤導(dǎo)致訪問(wèn)資源時(shí)出現(xiàn)404
這篇文章主要介紹了nginx反向代理服務(wù)因配置文件錯(cuò)誤導(dǎo)致訪問(wèn)資源時(shí)出現(xiàn)404,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06如何配置Nginx每個(gè)進(jìn)程最多打開(kāi)的文件數(shù)量
這篇文章主要介紹了配置Nginx每個(gè)進(jìn)程最多打開(kāi)的文件數(shù)量,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06