防盜鏈原理: http標準協議中有專門的字段記錄referer 一來能夠追溯上一個入站地址是什麼; 二來對於資源文件,能夠跟蹤到包含顯示他的網頁地址是什麼。 所以全部防盜鏈方法都是基於這個Referer字段,主要有兩種方法實現:html
第一種:使用FilesMatch ServerAdmin laogui@gmail.com DocumentRoot D:/www/www.chinahtml.com ServerName www.aaa.com ServerName aaa.com 盜用鏈接指定顯示的頁面。也能夠不用此項,這樣盜用鏈接也可沒法使用。 ErrorDocument 404 http://www.chinahtml.com/error.html 容許www.aaa.com的網站使用 SetEnvIfNoCase Referer "^http://www.aaa.com" local_ref=1 容許 aaa.com 的網站使用 SetEnvIfNoCase Referer "^http://aaa.com" local_ref=1 定義防盜文件的擴展名 Order Allow,Deny Allow from env=local_ref 容許上面指定域名linux
防盜鏈設置樣本:使用正則表達式 SetEnvIf Referer "^http://(.)+\.ilinux\.cn/" local_ref=1 SetEnvIf Referer "^http://(.)+\.isql\.cn/" local_ref=1 #SetEnvIf Referer "^http://(.)+\.other\.org\.cn/" local_ref=1 SetEnvIf Request_URI "/logo(.)+" local_ref=0 Order Allow,Deny Allow from env=local_ref
解釋:正則表達式
第二種方法: 使用rewirte方式: RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn/.$ [NC] RewriteCond %{HTTP_REFERER} !^http://bbs.ilinux.cn$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn/.$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.ilinux.cn$ [NC] RewriteCond %{HTTP_REFERER} !^http://ilinux.cn/.$ [NC] RewriteCond %{HTTP_REFERER} !^http://ilinux.cn$ [NC] RewriteRule ..(gif|jpg|jpeg|avi|bmp|ram|rmvb|rm|rar|zip)$ http://www.ilinux.cn [R,NC] 上面的,須要Rewrite模板。全部指定的文件,若是Referer不是上面的值,將被重定向到首頁。sql
還有使用.htaccess 文件的方法,不過不推薦使用,影響apache性能。 寫一個.htaccess 包含如下代碼: SetEnvIfNoCase Referer "^http://google.com/" local_ref=1 Order Allow,Deny Allow from env=local_ref Allow from 127.0.0.1 Allow from 123.123.123.123apache
若是你的網址是www.myst.cn就改成 SetEnvIfNoCase Referer "^http://www.myst.com/" local_ref=1 這意思是說防止人家連結你的jpg檔案。能夠增修爲 <FilesMatch ".(jpg|zip|rar)"> ps:最後一個不使用區各線 Allow from 127.0.0.1 這表示容許連結主機的IP。 你要是默認其餘網站能夠連結的話,就填入該主機IP,把上述的code儲存爲.htaccess而後放入你安裝的目錄下便可。服務器
注:*nix系統在apache配置文件裏面打開使用.htaccess功能。多線程
下面一一介紹怎麼在Apache裏面實現防盜鏈、限制客戶端下載線程數,限制下載帶寬這些功能。 防盜鏈 傳統的防盜鏈都是經過Referer來判斷用戶來路的,不過這樣的方法對於下載工具來講形同虛設,由於如今的下載工具早就能僞造Referer了。 如今一些流行的防盜鏈的方式都是用在瀏覽頁面的時候產生一個隨機驗證碼,在用戶點擊鏈接的時候服務器會驗證這個驗證碼是否有效從而決定是否容許下載。或者就是用某些方法把文件實際地址進行假裝。不過這些都不怎麼好用,下面介紹一個簡單有效的方式來實現防盜鏈。 其實就是用Cookie,配合Apache的URL Rewrite模塊很簡單的就能實現防盜鏈下載。 首先在瀏覽頁面的時候,會向客戶端發送一個特別的Cookie,例如「Site=jzxue.Com「,盜鏈而來的將沒有這個Cookie。 在Apache的httpd.conf文件裏面搜索: #LoadModule rewrite_module modules/mod_rewrite.so 把它前面的#去掉, 再找到塊,在裏面加入相似以下代碼: # Other configurati**** … RewriteEngine On # 啓動URL Rewrite引擎 RewriteCond %{HTTP_COOKIE} !^.(?:Site=jzxue.Com).$ # 對於Cookie裏面沒有特殊記錄的請求進行重定向 RewriteRule ^.*$ error.html # 將非法訪問重定向到錯誤頁面 這樣若是一個盜鏈而來的請求將會由於沒有特殊Cookie而被重定向到錯誤頁面,就算實際地址暴露也不怕。至於這個Cookie的內容是什麼以及有效時間徹底能夠由管理員本身來設定,也就是說下載工具也無法僞造,從而防止了服務器資源被盜鏈的危險。dom
限制客戶端多線程下載 限制多線程如今須要用到一個Apache的擴展模塊mod_limitipconn,這裏是做者的官方網站 http://dominia.org/djao/limitipconn2.html,先下載適合本身版本的模塊文件到Apache安裝目錄下的modules目錄下面,而後在httpd.conf文件中搜索: #LoadModule status_module modules/mod_status.so 把它前面的#去掉,再加入: ExtendedStatus OnLoadModule limitipconn_module modules/mod_limitipconn.dll # 若是你下載的不是Win版,請把後面的文件名改成你所下載的文件名。 # 這裏表示限制根目錄,即所有限制,能夠根據須要修改 MaxConnPerIP 2 # 這裏表示最多同時兩個線程 NoLimit html/* # 這裏表示html目錄下不受限制 這樣來自同一客戶端的超過2個的線程請求將被拒絕,從而限制了客戶端的多線程下載。工具
限制下載帶寬 這個一樣須要擴展模塊支持,模塊是mod_bw,在做者的官方網站http://ivn.cl/apache/能夠下載到。一樣也是放入modules目錄下面,而後在httpd.conf文件中加入: LoadModule bw_module modules/mod_bw.dll 再找到塊,加入: # Other configurati**** … BandwidthModule On # 啓動帶寬限制 ForceBandwidthModule On # 啓動帶寬限制 MaxConnection all 2000 # 最大鏈接數2000 Bandwidth all 200000 # 單個客戶端最大帶寬200KB 這樣限制了同時最多2000個鏈接數,每一個客戶端最大200KB的下載帶寬。性能
到此,咱們的完美限制的HTTP下載服務器就配置完成了,從新啓動你的Apache這些功能便能生效了。