Apache配置防盜鏈

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

舉個例子:好比你搭了個discuz論壇,裏面有些熱點圖片、視頻;而後別人將他網站上訪問圖片的地址重定向到你的discuz上,這樣他的服務器就能夠空閒出來了;也就是說別人訪問他網站的圖片視頻,消耗的確是你服務器的資源;apache

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

 

方法1:Apache 防盜鏈的第一種實現方法,能夠用rewrite實現。緩存

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

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

rewrite_module (shared)網站

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

LoadModule rewrite_modulemodules/mod_rewrite.sospa

而後在找到本身網站對應的配置的地方(如在主配置文件中或虛擬主機中),加入下列代碼:視頻

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>

相關文章
相關標籤/搜索