一、nginx的匹配:
nginx中location的優先級和匹配方式:
1.精確匹配:location = / 對字符串進行完全匹配,必須完全符合
2.正則匹配:location ^~
^~ 前綴匹配,以什么為開頭
~區分大小寫的匹配
~* 不區分大小寫
!~:區分大小寫取反
!~*:不區分大小寫的取反
3.一般匹配:location / 字符串
4.location的優先級:精確匹配 > 正則匹配 > 區分大小寫 > 一般匹配
5.實際網站中的使用規則:
第一個:網站的首頁:
location = /{?
?root html;
?index? ? index.html? index.html? index.php;
}
第二個:必選規則,處理靜態請求的頁面
location ^~ /static {
root/web/stsatic/;
index? ? index.html? index.html? index.php;
}
location ~*\. (ipg.gif | ipeg |? cess)$?{
root/web/picturs/;
index? ? index.html? index.html? index.php;
}:訪問圖片或著是指定的后綴面
第三個:一般是通用規則,用來轉發.php或者.js為后綴的動態請求到后端服務器(數據庫)
location / {
proxy_pass
}: 轉發后端請求和負載均衡
練習:
1、http://www.example.com/gallery/images/cat.png
A.location /gallery { }
B.location ^~* /.(png|jpg)$ { }
C.location = /gallery/images { }
D.location / { }
選擇:B
解析:
A,一般匹配,只能匹配到gallery目錄下面的文件
B,匹配的是/目錄下面,png結尾的文件
C,精確匹配要完整路徑,/gallery/images/cat.png
D,一般匹配匹配所有
2.如果訪問/abcd 會匹配到哪個config?
A.location ~ /abc { }
B.location /abc { }
C.location ^~ /abc { }
選擇:C
解析:
正則匹配,能匹配到,但是優先級沒有C高
是匹配/abc下面的文件,匹配不了/abcd目錄下面
二、rewrite重定向:就是把當前訪問的頁面跳轉到其它頁面。
? ? ? 1. rewrite的工作方式:通過nginx的全局變量或者自定義變量,結合正則表達式和標志位實現url的重定向。
? ? ? 2.nginx的變量
? ? ? $uri? 客戶端請求的uri地址?
? ? ? $host:請求的主機名
? ? ?$http_user_agent:客戶端請求的瀏覽器和操作系統
? ? ?$http_referer:請求頭的refe信息,表示當前頁面來源的url
? ? ?$remote_addr:客戶端的IP地址
? ? ?$remote_port:客戶端的端口號
? ? ?$server_addr:服務端的IP地址
? ? ?$server_port:服務端的端口號
? ? ?$request_method:獲得客戶端請求的方法
? ? ?$scheme:請求的協議,要么是http要么是https
? ? ?x_forwarded_for:用來獲取請求頭當中客戶端的真實p地址,代理服務器添加,在代理服務器當中指示宮戶端的ip地址
? ? ?X-Real-!R: 客戶端真實的ip地址。
? ? ?proxy_set _header X-Real-IP $remote addr 加上這一字段,客戶端的真實ip地址就會傳遞給后端服務器。
? 3.flag標志位:
permanent:永久重定向,返回碼是301,瀏覽器地址欄會顯示跳轉后的url地址
redirect:臨時重定向,返回碼是302,瀏覽器地址欄會顯示跳轉后的url地址
break:永久重定向,返回碼也是301,但是它匹配到規則之后不會再向下匹配其它規則,url也不會發生變化
last:重定向,但是會繼續向下匹配其它的location規則, 在重定向的過程中,使用了last方式進行重定向,但是,沒有結束語,陷入了死循環,nginx會自動循環10次,last匹配最多只能執行10次,超過10次沒有結束,就會停止,報錯500
4.rewrite的執行順序:
server模塊的rewrite優先級最高
匹配location的規則
執行選定的location規則
5.rewrite的語法
rewrite :正則表達式,跳轉后的內容 標志位
三、實驗:
1.基于域名進行跳轉,老的不用了,但是依然可以訪問,統統跳轉到新的域名
2.#基于客戶端的ip進行跳轉 公司有新業務上線,測試階段,其他的ip只能顯示維護中,只有192.168.223.61能正常訪問。
?
?