Apache配置防盜鏈


有時候,你的網站莫名其妙的訪問量變大,不要高興的太早,有可能是被別人盜鏈了。

舉個例子:比如你搭了個discuz論壇,里面有些熱點圖片、視頻;然后別人將他網站上訪問圖片的地址重定向到你的discuz上,這樣他的服務器就可以空閑出來了;也就是說別人訪問他網站的圖片視頻,消耗的確是你服務器的資源;

解決這個問題的方法是配置下防盜鏈,讓外來的盜不了鏈;

 

方法1:Apache 防盜鏈的第一種實現方法,可以用rewrite實現。

首先要確認 Apache 的rewrite module可用:

[root@www~]# apachectl -M | grep rewrite

rewrite_module (shared)

打開 httpd.conf,確保有這么一行配置:

LoadModule rewrite_modulemodules/mod_rewrite.so

然后在找到自己網站對應的配置的地方(如在主配置文件中或虛擬主機中),加入下列代碼:

ServerName www.benet.com

#防盜鏈配置

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]        

RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]    

RewriteRule.*\.(gif|jpg|swf)$http://www.benet.com/about/p_w_picpath.png [R,NC,L]

注:相關選項的解釋

1.RewriteEngineOn    #啟用rewrite,要想rewrite起作用,必須要寫上

2.%{HTTP_REFERER}:服務器變量,HTTPReferer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器藉此可以獲得一些信息用於處理。比如從我主頁上鏈接到一個朋友那里,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。

3.[ NC]指的是不區分大小寫,[R]強制重定向 redirect

4.字母L表示如果能匹配本條規則,那么本條規則是最后一條(Last),忽略之后的規則 

注:相關配置的解釋

1.RewriteCond %{HTTP_REFERER}!^$ 上面這一行意在允許空“HTTP_REFERER”的訪問,即允許用戶在瀏覽器地址欄中直接輸入圖片地址時圖片文件的顯示。

2.RewriteCond %{HTTP_REFERER} !benet\.com/.*$ [NC]

 RewriteCond %{HTTP_REFERER} !www\.benet\.com/.*$ [NC]

   設置允許訪問的HTTP來源,包括網站自身。

3.RewriteRule .*\.(gif|jpg|swf)$http://www.benet.com/about/p_w_picpath.png[R,NC,L] 

定義被盜鏈時替代的圖片,讓所有盜鏈 jpg、gif、swf 等文件的網頁,顯示網頁文檔根目錄下的about/ p_w_picpath.png 文件。注意:替換顯示的圖片不要放在設置防盜鏈的目錄中,並且該圖片文件體積越小越好。當然你也可以不設置替換圖片,而是使用下面的語句即  可:RewriteRule.*\.(gif|jpg|png)$ - [F]

注:[F] (強制URL為被禁止的 forbidden),強制當前URL為被禁止的,即,立即反饋一個HTTP響應代碼403(被禁止的)。

注意:測試時要清除濟瀏覽器緩存

 

方法2:通過判斷瀏覽器頭信息來阻止某些請求,即利用SetEnvIfNoCaseaccess

這個方法可以通過阻止某些機器人或蜘蛛爬蟲抓取你的網站來節省你的帶寬流量。

語法: SetEnvIfNoCaseattribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...

SetEnvIfNoCase當滿足某個條件時,為變量賦值,即根據客戶端請求屬性設置環境變量。

注:Referer :指明了請求當前資源原始資源的URL,使用referer是可以防盜鏈

然后在找到自己網站對應的配置的地方(如在主配置文件中或虛擬主機中),加入下列代碼:

 

SetEnvIfNoCase Referer "^$"local_ref

SetEnvIfNoCase Referer "www.benet.com/.*$"local_ref

SetEnvIfNoCase Referer "benet.com/.*$"local_ref

<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif)"> 

    Require all denied

    Require env local_ref

</filesmatch>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM