一、location匹配的規則和優先級(*)
URI:統一資源標識符,是一種字符串標識,用于標識抽象的或者是物理資源;如:文件、圖片、視頻等
nginx中的URI匹配的是:網址”/“后的路徑 如:…………/images/a.jpg
?location就是用來匹配URI的
匹配方式
匹配方式 | |
---|---|
1、精確匹配: | location = / {……} |
2、正則匹配: | location ~ / {……} |
3、一般匹配: | location / {……} |
匹配規則
匹配規則: | |
---|---|
= | 精確匹配,完全匹配,不能錯誤一個字,必須要完全匹配 |
^~ | 匹配普通字符,前綴匹配 |
$~ | 結尾匹配 |
~???????? | 區分大小寫的匹配 |
~* | 不區分大小寫的匹配 |
!~ | 區分大小寫的匹配,并且邏輯取反 |
!~* | 不區分大小寫的取反 |
location匹配的原則:越精準,越匹配;同時優先級越高
總結:匹配的優先級——>越精準,優先級越高
location的優先級
location =? :精確匹配??
location ^~ :前綴匹配
location ~* :? 正則匹配
location /xxx/ : 一般匹配的準確匹配
location / : 一般匹配
注意:一旦匹配成功,后續將不再匹配
工作中的location匹配規則
一、第一個 必選規則
location = / { }
原因:直接匹配根網站。直接通過域名訪問首頁是網站最常用的,直接使用精確匹配,可以加快處理,一般使用精確匹配處理的都是首頁
二、第二個規則
location ^~ /static/ { }
處理靜態文件的請求,目錄匹配 (static為自定義)
三、
location ~* \.(gif | jpg | png | css)
匹配圖片,但注意如果使用rewrite來指定后綴的類型,要在location定義中移除,不然會陷入死循環
四、通用規則
location / {
? ? ? ? proxy_pass? ?————指定代理、反向代理,轉發動態請求,如php.jsp請求 ,發到后端
}
rewrite 重寫、重定向
rewrite使用nginx的全局變量,或是自己設置的變量,結合正則表達式,和標志位實現URL的重定向
default_type text/plain;
表示如果沒有在其他地方顯示:content_type的頭字段,默認響應為text/plain純文本格式
text/html :默認的響應類型,也就是頁面
text/plain :純文本格式,類似.txt文件
text/css :css樣式的類型:css
text/javascript:java腳本,.js。前端文件,也可以理解是iava解析的程序文件。
rewrite 執行順序
1、執行service模塊中的rewrite
2、執行location中的匹配
3、如果location當中還有rewrite,則會繼續執行
注意:如果不停的rewrite,則只會循環執行10次,10次過后進行報錯,返回狀態碼:500
rewrite的語法
rewrite <regex(正則)> <replacement> [flag(標志位)]
過程:
rewrite:開始重定向
regex:正則匹配的規則
replacement :表示跳轉后內容,要重定向的URL
flag:標志位
? ? ? ? 標志位分為四種:
? ? ? ? permanent :永久重定向、返回碼301 —— 永久性的變更URL,搜索引擎會轉移他的權重,以及排名,到新的URL
? ? ? ? redirect :臨時重定向,返回碼:302 —— 用于短期變更(網站維護、升級、更新),搜索,是不會轉移權重和排名
? ? ? ? ????????返回碼:304? ?指的是獲取的是本地緩存
? ? ? ? break :重定向,但是不會改變原始的URL,內容會根據系統處理而顯示重定向后的內容,并且只會請求一次,即刻跳出當前匹配,立即終止
? ? ? ? last :表示本條匹配完成后,繼續向下匹配,只要有last就會繼續進行匹配,配置時需要注意,防止死循環
配置基于域名的跳轉
首先進入nginx的配置文件 進行修改
vim /usr/local/nginx/conf/nginx.confserver {listen 80;server_name www.zheng.cc;#charset koi8-r;#access_log logs/host.access.log main;location / {if ($host = 'www.zheng.cc') {rewrite ^/(.*)$ http://www.bai.com/$1 permanent;}root html;index index.html index.htm;}
}
在本地hosts文件中寫入配置的地址
echo "20.0.0.40 www.zheng.cc www.bai.com" >> /etc/hosts
重啟nginx服務
systemctl restart nginx
測試:輸入配置的地址 www.zheng.cc 后回車
?會跳轉至配置的www.bai.com