重寫功能 rewrite

Nginx服務器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請求,此功能依靠 PCRE(perl compatible regular expression),因此編譯之前要安裝PCRE庫,rewrite是nginx服務器的重要功能之

一,用于實現URL的重寫,URL的重寫是非常有用的功能,比如它可以在我們改變網站結構之后,不需要客戶端修改原來的書簽,也無需其他網站修改我們的鏈接,就可以設置為自動訪問,另外還可以在一定程度上提高網站的安全性。

ngx_http_rewrite_module模塊指令

官方文檔: Module ngx_http_rewrite_module

if 指令

官方文檔:

Module ngx_http_rewrite_module

  • if指令可以配置在server或location塊中

  • if指令用于條件匹配判斷,并根據條件判斷結果選擇不同的Nginx配置
  • Nginx的if語法僅能使用if做單次判斷,不支持使用if else或者if elif這樣的多重判斷
  • 使用正則表達式對變量進行匹配,匹配成功時if指令認為條件為true,否則認為false

用于條件匹配判斷,并根據條件判斷結果選擇不同的Nginx配置,可以配置在server或location塊中進行配置,Nginx的if語法僅能使用if做單次判斷,不支持使用if else或者if elif這樣的多重判斷,用法如下:

if (條件匹配) { ?action
}

使用正則表達式對變量進行匹配,匹配成功時if指令認為條件為true,否則認為false,變量與表達式之間使用以下符號鏈接:

= #比較變量和字符串是否相等,相等時if指令認為該條件為true,反之為false

!= ?#比較變量和字符串是否不相等,不相等時if指令認為條件為true,反之為false

~ #區分大小寫字符,可以通過正則表達式匹配,滿足匹配條件為真,不滿足匹配條件為假

!~ #區分大小寫字符,判斷是否匹配,不滿足匹配條件為真,滿足匹配條件為假

~* #不區分大小寫字符,可以通過正則表達式匹配,滿足匹配條件為真,不滿足匹配條件為假

!~* #不區分大小字符,判斷是否匹配,滿足匹配條件為假,不滿足匹配條件為真

-f 和 !-f #判斷請求的文件是否存在和是否不存在

-d 和 !-d #判斷請求的目錄是否存在和是否不存在

-x 和 !-x #判斷文件是否可執行和是否不可執行

-e 和 !-e #判斷請求的文件或目錄是否存在和是否不存在(包括文件,目錄,軟鏈接)

#注意:

#如果$變量的值為空字符串或0,則if指令認為該條件為false,其他條件為true。

#nginx 1.0.1之前$變量的值如果以0開頭的任意字符串會返回false

?return 指令

  • return用于完成對請求的處理,并直接向客戶端返回響應狀態碼
  • return可以在server、location塊和 if 進行配置
  • 處于此指令后的所有配置都將不被執行

語法格式:

Syntax:????????return code [text];? //返回給客戶端的狀態碼及響應報文的實體內容return code URL;??? //返回給客戶端的URL地址return URL;
Default:????????—
Context:????????server, location, if

狀態碼 301 和 302

狀態碼

含義

區別

301

永久重定向

服務器不需要每次向客戶提供新的url,客戶訪問過后會記錄在自己的緩存中,即使nginx服務器死機,客戶在一定時間內也可以繼續跳轉

302

臨時重定向

沒有緩存,服務器斷開無法重定向

?

?

set 指令

  • set定義格式為set $key value
  • 指定key并給其定義一個變量,變量可以調用Nginx內置變量賦值給key
  • value可以是text, variables和兩者的組合

語法格式:

Syntax:????????set $variable value;
Default:????????—
Context:????????server, location, if

break 指令

  • 用于中斷 當前相同作用域(location)中的其他Nginx配置,與該指令處于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模塊中指令就不再執行。

語法格式:

Syntax:????????break;
Default:????????—
Context:????????server, location, if

rewrite 指令

  • 通過正則表達式的匹配來改變URI,可以同時存在一個或多個指令,按照順序依次對URI進行匹配,rewrite主要是針對用戶請求的URL或者是URI做具體處理

語法格式:

Syntax:????????rewrite regex replacement [flag];
Default:????????—
Context:????????server, location, if//正則匹配原始訪問url??? 替代你想讓客戶訪問的???? 標志 ()premanent301?? redirect302? break? last

flag 說明:

類型

flag

區別

跳轉型

redirect

臨時重定向302

?

permanent

永久重定向301

代理型

break

是立即終止匹配 ?使用該url進行匹配

?

last

停止本location中的匹配,開啟新一輪的location匹配

  • 跳轉型指由客戶端瀏覽器重新對新地址進行請求
  • 代理型是在WEB服務器內部實現跳轉
  • break 和 last 是為了防止死循環使用的

防盜鏈

防盜鏈基于客戶端攜帶的referer實現,referer是記錄打開一個頁面之前記錄是從哪個頁面跳轉過來的標記信息,如果別人只鏈接了自己網站圖片或某個單獨的資源,而不是打開了網站的整個頁面,這就是盜鏈,referer就是之前的那個網站域名,正常的referer信息有以下幾種:

none:請求報文首部沒有referer首部,比如用戶直接在瀏覽器輸入域名訪問web網站,就沒有referer信息。

blocked:請求報文有referer首部,但無有效值,比如為空。

server_names:referer首部中包含本主機名及即nginx 監聽的server_name。

arbitrary_string:自定義指定字符串,但可使用 * 作通配符。示例:*.kgc.org 或 www.kgc.*

regular expression:被指定的正則表達式模式匹配到的字符串,要使用 ~ 開頭,例如:~.*.kgc.com

?
location ~* \.(jpg|gif|swf)$ {???????????root? /data/nginx/pc;valid_referers none blocked *.pc.com pc.com;??if ( $invalid_referer ) {rewrite ^/ http://www.pc.com/error.png;#return? 403}}??????????????
~* \.(jpg|gif|swf)$:這段正則表達式表示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的文件Valid_referers:設置信任的網站,可以正常使用圖片。None :瀏覽器中 referer 為空的情況,就是直接在瀏覽器訪問圖片。Blocked :referer 不為空的情況 ,但是值被代理或防火墻刪除了,這些值不以 http://或https://開頭。后面的網址或者域名:referer 中包含相關字符串的網址。If 語句:如果鏈接的來源域名不在 valid_referers 所列出的列表中,$invalid_referer 為1,則執行后面的操作,即進行重寫或返回 403 頁面。

?實際操作

#機器一
server {listen 80;server_name www.cc.com;root /data/html;index index.html;
location ~* \.(jpg|gif|swfjepg|bmp)$ {
#訪問時已上面這些結尾時跳轉到/data/html/tp文件夾下
root /data/html/tp;
}
}
#在/data/html/tp站點下加入一張測試圖片a.jpg#盜圖機器二
需要在/etc/hosts文件下加入www.cc.com的域名解析#設置盜圖機器的主站點
server {
listen 80;
server_name www.dao.com;
root /data/;
}#在主站點下寫一個index.html文件
vim ?index.html
<html>
<body>
<h1>this is daotu ?</h1>
<img src="http://www.cc.com/a.jpg"/>
</body>
</html>

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37610.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

充電寶口碑哪個好?好用充電寶品牌有哪些?好用充電寶推薦

充電寶作為我們日常生活和出行的重要伙伴&#xff0c;其品質和性能直接影響著我們的使用體驗。今天&#xff0c;就來和大家探討一下充電寶口碑哪個好&#xff0c;為大家盤點那些備受贊譽的好用充電寶品牌&#xff0c;并向您推薦幾款值得入手的充電寶&#xff0c;外出時不再擔心…

mac英語學習工具:Eudic歐路詞典 for Mac 激活版

Eudic歐路詞典是一款非常受歡迎的英語學習軟件&#xff0c;它提供了豐富的詞匯解釋、例句、同義詞、反義詞等功能&#xff0c;幫助用戶更好地理解和掌握英語單詞。 以下是Eudic歐路詞典的一些主要特點&#xff1a; 海量詞匯庫&#xff1a;Eudic歐路詞典擁有龐大的詞匯庫&#…

flutter photo_manager 報錯:Error: ‘DecoderCallback‘ isn‘t a type.

看看是不是你的photo_manager版本少于3.0。如果是少于3.0&#xff0c;請及時升級到3.0及以上版本&#xff0c;同時因為photo_manager3.0不再提供 AssetEntityImageProvider 這個方法&#xff0c;會導致報錯&#xff0c;不要慌&#xff0c;請添加下方的庫即可解決問題&#xf…

為什么人人都要懂一些銷售思維

創業看事情的高度、考慮的維度比做銷售更高、更復雜、更全面&#xff0c;銷售思維、銷售方法更多時候用在解決局部問題&#xff0c;幫我們打局部戰爭&#xff0c;它是術。 但是&#xff0c;我仍然認為&#xff0c;銷售思維是一種很有用、有效、有力量、必要的思維。我們每個人…

面試題002-Java-Java集合

面試題002-Java-Java集合 目錄 面試題002-Java-Java集合題目自測題目答案1. 說說 List,Set,Map 三者的區別&#xff1f;三者底層的數據結構&#xff1f;2. 有哪些集合是線程不安全的&#xff1f;怎么解決呢&#xff1f;3. 比較 HashSet 、LinkedHashSet 和 TreeSet 三者的異同&…

簡過網:考一建需要報培訓班嗎?報班費用是多少錢

近幾年來&#xff0c;越來越多的朋友都開始關注和參與備考一建&#xff0c;那么&#xff0c;大家在備考一建時&#xff0c;都報培訓班了嗎&#xff1f;報班的費用是多少錢&#xff1f;接下來&#xff0c;我們一塊來了解一下吧&#xff1f; ? 一、考一建需要報培訓班嗎&#…

【Jetpack】Lifecycle之自定義LifecycleOwner

Lifecycle設計講解 Lifecycle的設計其實十分簡單&#xff0c;主要就是Lifecycle對象和LifecycleOwner接口 Lifecycle用于記錄對象的生命周期&#xff0c;以及在生命周期發生改變時通知外部 LifecycleOwner用于表示對象具備生命周期管理能力 LifecycleOwner的實現方式很簡單&…

賽目科技三度遞表:凈利率及資產回報率不斷下滑,經營成本越來越高

《港灣商業觀察》施子夫 5月29日&#xff0c;北京賽目科技股份有限公司&#xff08;以下簡稱&#xff0c;賽目科技&#xff09;第三次遞表港交所&#xff0c;公司擬主板上市&#xff0c;獨家保薦機構為光銀國際。 公開信息顯示&#xff0c;賽目科技此前曾于2022年12月&#x…

Java全套智慧校園系統源碼:核心功能、發展趨勢、基于電子班牌: Android 7.1+小程序:原生開發+多學校Saas 模式

Java全套智慧校園系統源碼&#xff1a;核心功能、發展趨勢、基于電子班牌&#xff1a; Android 7.1小程序&#xff1a;原生開發多學校Saas 模式 智慧校園系統是一個集成了多種功能的綜合性平臺&#xff0c;旨在提升校園內的教學、管理、服務等方面的效率和體驗。那么&#xff…

比較(五)利用python繪制棒棒糖圖

比較&#xff08;五&#xff09;利用python繪制棒棒糖圖 棒棒糖圖&#xff08;Lollipop plot&#xff09;簡介 棒棒糖圖實際上是修飾后的條形圖。當在處理大量的值&#xff0c;并且當這些值都很高時&#xff0c;棒棒糖圖就很有用。 快速繪制 基于matplotlib import pandas as…

【前端環境1】安裝nvm

【前端環境1】安裝nvm 寫在最前面一、下載nvm二、安裝教程三、驗證nvm安裝 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻時光&#xff0c;感謝你的陪伴與支持 ~ &#x1f680; 歡迎一起踏上探險之旅&#xff0c;挖掘無限可能&#xff0c;共同成…

狗都能看懂的Reinforcement Learning簡介

文章目錄 一、什么是強化學習二、強化學習的應用 一、什么是強化學習 強化學習的流程可以用上面這張圖來說明&#xff1a;智能體&#xff08;Agent&#xff09;對環境進行觀測&#xff0c;然后根據觀測結果&#xff08;Observation / State&#xff09;采取相應的動作&#xff…

實現Ubuntu計劃任務的反彈shell

一、實驗環境 Ubuntu&#xff1a;IP地址&#xff1a;192.168.223.156 Kali : IP地址&#xff1a;192.168.223.152 二、編寫crontab計劃任務 在Ubuntu的系統中使用crontab -e命令編寫計劃任務&#xff0c;如下所示&#xff1a; 作用&#xff1a;是將一個交互式的bash …

device_node和platform_device的生成流程

1. machine_desc的匹配 《這篇》有介紹DT_MACHINE_START的一些初始化操作&#xff0c;匹配上就會在后續的初始化中調用DT_MACHINE_START的成員來初始化系統的設備樹&#xff0c;時鐘&#xff0c;中斷等 start_kernelsetup_arch(&command_line);mdesc setup_machine_fdt(…

行列視報表系統制作的報表與廠級監控信息系統(SIS)系統中的報表有什么區別?

廠級監控信息系統是集過程實時監測、優化控制及生產過程管理為一體的廠級自動化信息系統&#xff0c;是處于DCS以及相關輔助程控系統與全廠管理信息系統之間的一套實時廠級監控信息系統&#xff0c;該產品也是本公司的一套獨立產品。 SIS系統中的報表只是其中的一個模塊&#…

混合云管道的未來:集成 MinIO、Tailscale 和 GitHub Actions

數據處理是現代軟件開發的基本實踐。它使團隊能夠自動收集、處理和存儲數據&#xff0c;確保高質量的數據和高效的處理。 在本文中&#xff0c;我們將探討如何建立一個全面的數據處理管道&#xff0c;重點介紹如何使用 Tailscale GitHub Action 進行安全網絡。此設置還將包含 …

植物大戰僵尸雜交版手機下載與安裝全攻略

植物大戰僵尸雜交版是一款深受玩家喜愛的策略冒險游戲&#xff0c;以其豐富的植物種類、多樣的關卡設計和趣味的玩法著稱。本文將為您提供詳細的下載與安裝教程&#xff0c;幫助您快速上手&#xff0c;享受游戲帶來的樂趣。 游戲簡介 植物大戰僵尸雜交版在傳統玩法的基礎上&a…

【機器學習】語音轉文字 - FunASR 的應用與實踐(speech to text)

本文將介紹 FunASR&#xff0c;一個多功能語音識別模型&#xff0c;包括其特點、使用方法以及在實際應用中的表現。我們將通過一個簡單的示例來展示如何使用 FunASR 將語音轉換為文字&#xff0c;并探討其在語音識別領域的應用前景。 一、引言 隨著人工智能技術的不斷發展&am…

linux的安全技術和防火墻

一、安全技術 1.入侵檢測系統&#xff1a;特點式不阻斷網絡訪問&#xff0c;主要式提供報警和事后監督&#xff0c;不主動介入&#xff0c;默默的看著你&#xff08;相當于360安全衛士&#xff09; 2.入侵防御系統&#xff1a;透明模式工作&#xff0c;對數據包&#xff0c;網…

平價高性價比藍牙耳機有哪些?盤點好用平價的藍牙耳機推薦

在當今快節奏的生活中&#xff0c;藍牙耳機已經成為人們日常生活中不可或缺的配件&#xff0c;它們不僅讓我們可以在行走、工作或者鍛煉時享受音樂&#xff0c;還提供了便利的通話功能。然而&#xff0c;市面上藍牙耳機種類繁多&#xff0c;價格相差甚遠&#xff0c;大家往往難…