nginx的重定向(rewrite)問(wèn)題及解讀
1、location 匹配
location匹配的就是后面的URL,對(duì)訪問(wèn)的路徑做訪問(wèn)控制或者代理轉(zhuǎn)發(fā)
共有三個(gè)匹配:精確匹配、正則匹配、一般配
a、精確匹配
格式:location=/ 對(duì)字符串進(jìn)行完全匹配,必須完全合
b、正則匹配
- ^~:前綴匹配 以什么為開(kāi)頭,如果匹配成功,則不再匹配其它的正則匹配的location。
- ~:區(qū)分大小寫(xiě)的匹配
- ~*:不區(qū)分大小寫(xiě)
- !~:區(qū)分大小寫(xiě)的區(qū)分
- !~*:不匹配大小的取反
c、一般匹配(通用匹配)
- location /字符串
2、location 優(yōu)先級(jí)以及原則
優(yōu)先級(jí):精確>正則>一般
優(yōu)先級(jí)總結(jié):
- location= 最高,必須是完整路徑
- location= 1.jpg 每一位都需要一摸一樣否則匹配不到
- location= 完整路徑 > location ^~ > location~ location ~* >location /部分起始位置 >location /
實(shí)際網(wǎng)站中的使用規(guī)則:
location= / {
root html;
index index.html index.htm index.php;
}網(wǎng)站首頁(yè)
第二個(gè)必選的規(guī)則:處理靜態(tài)請(qǐng)求的頁(yè)面
location^~ /static /{
root/web/sataic/
index index.html index.htm;
}用來(lái)匹配靜態(tài)頁(yè)面
location ~* \.(jpg.gif|png|jpeg|css)$ {
root /web/pirturs/;
idnex index.html index.tml;
}訪問(wèn)圖片或者指定的后綴名
第三個(gè)規(guī)則,一般通用規(guī)則,用來(lái)轉(zhuǎn)發(fā).php .js 為后綴的動(dòng)態(tài)請(qǐng)求到后端服務(wù)器(數(shù)據(jù)庫(kù))
location / {
proxy_pass
}轉(zhuǎn)發(fā)后端請(qǐng)求和負(fù)載均衡
3、rewrite重定向
rewrite就是把當(dāng)前訪問(wèn)的頁(yè)面跳轉(zhuǎn)到其他頁(yè)面
rewrite工作方式,通過(guò)nginx的全局變量或者是自定義變量,結(jié)合正則表達(dá)式和標(biāo)志位實(shí)現(xiàn)url的重定向,對(duì)訪問(wèn)的域名或者域名內(nèi)的URL路徑地址重寫(xiě)。
4、rewrite 和 location區(qū)別
從功能看 rewrite 和 location都能實(shí)現(xiàn)跳轉(zhuǎn),主要區(qū)別在于 rewrite 是在同一域名內(nèi)更改獲取資源的路徑,而 location 是對(duì)一類(lèi)路徑做控制訪問(wèn)或反向代理,還可以proxy_pass 到其他機(jī)器。
5、nginx的變量
- $url 客戶端另外的url地址
- $host 請(qǐng)求的主機(jī)名
- $http_user_agent :客戶端請(qǐng)求的瀏覽器和操作系統(tǒng)
- $http_referer:請(qǐng)求頭的fefrr的信息模式當(dāng)前頁(yè)面來(lái)源的url
- $remote_addr 客戶端的IP地址
- $remote_port 客戶端的端口
- $server_port 服務(wù)端的端口號(hào)
- $server_addr 服務(wù)端的ip地址
- $request_method 獲取客戶端請(qǐng)求的方法
- $scheme請(qǐng)求的協(xié)議,要么是http 要么是https
- x_forward_for :用來(lái)獲取請(qǐng)求頭當(dāng)中客戶端的真實(shí)ip地址,代理服務(wù)器添加,在代理服務(wù)器中指示客戶端的ip地址
- X-Real-IP: 客戶端真實(shí)的ip地址
6、標(biāo)志位
flag:(四種)
- permanen 永久重定向。返回碼是301 瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的url地址 (方便搜索引擎可以被搜索到)
- redirect 臨時(shí)重定向,返回碼302 瀏覽器地址會(huì)顯示跳轉(zhuǎn)后url地址
- break 永久重定向 返回碼也是301 但是他匹配到規(guī)則之后不會(huì)在向下匹配其他規(guī)則,url 也不會(huì)發(fā)生變化
- last 重定向但是會(huì)繼續(xù)向下匹配其他的location規(guī)則
7、rewrite的執(zhí)行順序
1、server模塊的rewrite優(yōu)先級(jí)最高
2、匹配location的規(guī)則
3、執(zhí)行選定的location規(guī)則
8、rewrite的語(yǔ)法
rewrite 正則表達(dá)式 跳轉(zhuǎn)后的內(nèi)容 標(biāo)志位;

在重定向的過(guò)程中使用last方式進(jìn)行重定向,但是沒(méi)有結(jié)束語(yǔ),陷入了死循環(huán),nginx會(huì)自動(dòng)循環(huán)10次
last最多只能執(zhí)行10次,超過(guò)10次沒(méi)有結(jié)束就會(huì)停止,然后保存500
將結(jié)束語(yǔ)last改成break避免死循環(huán)
9、實(shí)驗(yàn) 基于域名進(jìn)行跳轉(zhuǎn),老的不用了,但是依然可以訪問(wèn),統(tǒng)統(tǒng)跳轉(zhuǎn)到新的域名
宿主機(jī) :192.168.10.20 域名www.xy 1 0 2.com
if ( $host = 'www.xy102.com' ){
rewrite ^/(.*)$ http://www.zlm.com/$1 permanent;
在/etc/hosts目錄下進(jìn)行本地映射

在虛擬機(jī)自帶的瀏覽器對(duì)域名www.xy102.com進(jìn)行訪問(wèn),域名跳轉(zhuǎn)到www.zlm.com只域名跳轉(zhuǎn),內(nèi)容不變

10、實(shí)驗(yàn)
基于ip進(jìn)行跳轉(zhuǎn),公司有新業(yè)務(wù)上線,測(cè)試階段,其他的ip只能顯示維護(hù)中,只有本機(jī)能正常訪問(wèn)
設(shè)置一個(gè)變量名,變量名rewrite值是true,接下來(lái)判斷ip是否合法,true進(jìn)行跳轉(zhuǎn),如果是false跳轉(zhuǎn)到錯(cuò)誤頁(yè)面
set $rewrite true;
if ( $remote_addr = "192.168.10.20" ){
set $rewrite false;
}
if ( $rewrite = true ){
rewrite (.+) /error.html;
}
location = /error.html {
root html;
index index.html;
}error.html的內(nèi)容

使用宿主機(jī)192.168.10.20對(duì)192.168.10.20進(jìn)行訪問(wèn)

使用192.168.10.30對(duì)192.168.10.20進(jìn)行訪問(wèn)

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Ubuntu中Nginx虛擬主機(jī)設(shè)置的項(xiàng)目實(shí)踐
通過(guò)配置虛擬主機(jī),可以在同一臺(tái)服務(wù)器上運(yùn)行多個(gè)獨(dú)立的網(wǎng)站,本文主要介紹了Ubuntu中Nginx虛擬主機(jī)設(shè)置的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
Nginx服務(wù)器配置HTTPS nginx.config 配置文件(教程)
下面小編就為大家分享一篇Nginx服務(wù)器配置HTTPS nginx.config 配置文件(教程),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
Nginx中default_server指令問(wèn)題詳解
nginx 的 default_server 指令可以定義默認(rèn)的 server 出處理一些沒(méi)有成功匹配 server_name 的請(qǐng)求,下面這篇文章主要給大家介紹了關(guān)于Nginx中default_server指令問(wèn)題的相關(guān)資料,需要的朋友可以參考下2022-12-12
nginx控制連接數(shù)及訪問(wèn)速率的實(shí)現(xiàn)
本文主要介紹了Nginx中ngx_http_limit_conn_module和ngx_http_limit_req_module模塊的使用,用于控制連接數(shù)和請(qǐng)求速率,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
Nginx泛解析到子目錄后自動(dòng)判斷有無(wú)public目錄詳解
這篇文章主要給大家介紹了關(guān)于Nginx泛解析到子目錄后自動(dòng)判斷有無(wú)public目錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
關(guān)于nginx報(bào)錯(cuò)405?not?allowed解決方法總結(jié)
這篇文章主要給大家介紹了關(guān)于nginx報(bào)錯(cuò)405?not?allowed解決方法的相關(guān)資料,nginx遇到post請(qǐng)求靜態(tài)文件會(huì)得到405錯(cuò)誤,文中通過(guò)代碼介紹的非常詳細(xì),也給出了推薦方法,需要的朋友可以參考下2023-10-10

