Nginx重定向:
一般設定return 403;之後,網頁的頁面會出現:
403 Forbidden
----------------
nginx
這種顯示。
---我是華麗的分隔線---
.點比對任何單字元
*比對前面的字元零次或者多次。
+比對前面的字元1次或者多次,也就是最少1次,相當于{1,}
?比對前面的字元0次或者1次,相當于{0,1}
---我是華麗的分隔線---
正規表達式配置的文法:
rewrite regex replacement [flag]
Regex使用pcre正規表達式。
regex是^/(.*)是一個正規表達式,表示比對所有,比對完整的域名和後面的路徑位址。
---我是華麗的分隔線---
目錄對換/123456/xxxx->/xxxx?id=123456:
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
\d比對一個數字字元,等價于[0-9]
+加比對前面的子表達式一次或者多次。
點.比對除了\n之外的任何單個字元
last:相當于apache裡面的[L]标記,表示完成rewrite。
---我是華麗的分隔線----
禁止通路以.sh、.flv、.mp4為檔案字尾的URL:
location ~ .*\.(sh|flv|mp4)?$ {return 403;}
? 比對前面的表子達式零次或者一次。
\. 将下一個字元标記為一個特殊字元。
----我是華麗的分隔線----
網站資訊防盜鍊:
在我們部署網站後,網站中的靜态資源,比如網站中的圖檔,可以被其他網站大量盜用。為了解決這個問題,可以根據referer資訊進行防盜鍊的設定,以免網站資源被非法盜用,造成經濟損失。
HTTP協定中有一個表示“頁面或者資源”來源的請求頭,這個請求頭我們叫做Rerferer。Referer表示請求是從哪個網址發出來的。
防盜鍊功能是基于HTTP協定支援的Referer機制,通過Referer跟蹤請求來源,對來源進行識别和判斷。
防盜鍊的配置可以在任意location{}下配置,不能在server{…}中配置。
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.yourdomain.com *.yourdomain.com;
if($invalid_referer) {
rewrite ^/(.*) http://www.yourdomain.com/blocked.html;
}
}
~* \.(gif|jpg|png|swf|flv)$:這段正規表達式表示比對不分大小寫,以.gif、.jpg、.png、.swf、.flv等結尾的檔案。
valid_referers設定信任的網站,可以正常使用圖檔。
後面的網站網址或者域名:referer中包含的字元串的網址。
if語句:如果連結的來源域名不在valid_referers的清單中,那麼$invalid_referer為1,執行後面的操作,即進行rewrite重寫。
防盜鍊的指令是valid_referers。可選值是none,blocked,server_name。預設值是none。
valid_referers指令會根據Referer Header頭的内容,配置設定一個值為0或者1給變量$invalid_referer。如果Referer Header不符合valid_referers設定的有效referer,那麼變量$invalid_referer将被設定為1。
valid_referers指令的參數可以是:
①:none 表示無Referer值的情況。
②: blocked 表示Referer值被防火牆僞裝。
③:server_name 表示一個或者多個主機名稱,server_name中可以使用通配符*星号。
介紹http頭referer資訊:
①:當浏覽器向web 伺服器發送請求時一般都會帶上referer,包含目前請求頁面的來源位址,即表示目前頁面是通過這個來源頁面裡面的連結進入的。
②:背景伺服器可以根據擷取的referer資訊,判斷是否是自己信任的網站位址。如果是,則放行繼續通路。如果否,則可以傳回403狀态資訊。
③:服務端一般使用referer請求頭識别通路來源,以進行統計分析、日志記錄和緩存優化等。
valid_referers:
檢視referer,自動和valid_referers後面的變量進行比對,如果比對到,就将invalid_referer變量置為0(false,合法)。如果沒有比對到,就将invalid_referer變量置為1(true,不合法)。比對的過程中不區分大小寫。
valid_referers的文法:
valid_referers none | blocked | server_names | string
none:如果Header中的Referer值為空,允許通路。
blocked: 在Header中的Referer不為空,但是該值被防火牆或者代理進行僞裝過,如不帶http://、https://等協定頭的資源,允許通路。
server_names:指定具體的域名或者IP,可以使用通配符*。
string:支援正規表達式、帶*的字元串。如果是正規表達式,需要以~開頭表示。表達式将與http://或者https://之後的文本進行比對。
使用if判斷$invalid_referer,0(false,合法,不進入if塊)/1(true,不合法,進入if塊)。
鼓勵的話語:泰山崩于前,面不改色;大海嘯于後,而不變聲,為大丈夫!