獨立建博的使用者經常面對的一個問題就是伺服器的流量問題,而網站檔案被盜鏈是其中最
為主要的部分。所謂盜鏈,是指其他網站直接連結我們網站上的檔案,一般來說,盜鏈的
對象大多為很耗頻寬的大體積檔案,片、視頻等。這樣造成的後果主要有:增加了服
務器的流量負擔,影響我們網站的訪問速度。
如果你用的是Apache伺服器,那麼使用.htaccess檔案就可以很方便的進行設定,從而防
止其他網站的使用者盜鏈我們網站的檔案。
Apache中的.htaccess檔案
.htaccess檔案是Apache中相當重要的設定檔,其格式為純文字,它提供了針對目錄改
變更配置置的方法,通過在一個特定的文檔目錄中放置一個包含一個或多個指令的檔案,以作
用於此目錄及其所有子目錄。
通過.htaccess檔案,可以實現簡單地很多在IIS中很繁瑣甚至無法實現的功能,如密碼保
護、禁止顯示目錄列表、阻止/允許特定的IP地址、實現網址的301 重新導向等等。
正如上面所說,.htaccess檔案將影響其所在的目錄及其子目錄,因此,如果我們要保護
的內容(此處以防止圖片盜鏈為例,即圖片)位於網站內多個目錄下,可以考慮將其放在
根目錄下;而如果圖片有單獨的子目錄如“/images/”,則只需將其放置在該目錄下(當
然也可以放到根目錄中)。
需要注意的是,如果通過FTP方式將建立好的.htaccess上傳到伺服器上,傳輸模式應為
ASCII而非Binary。上傳到伺服器後,應將其屬性通過CHMOD修改為644 或“RW-R–R–”
,這樣,可以保證伺服器能夠使用同時無法通過瀏覽器修改,當然,.htaccess的可讀屬
性也存在一定的風險:攻擊者可通過它找出您要保護的對象或認證檔案位置——解決辦法
是將認證檔案.htpasswd放到網站根目錄之外,這樣,便無法通過網路找到它了。
使用.htaccess禁止盜鏈
通過.htaccess來防止網站的圖片、壓縮檔、或視頻等非Html檔案被盜鏈的方法相當簡
單,通過在該檔案中加入幾句命令即可保護我們寶貴的頻寬。例如本站的設定如下:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !webeta.cn [NC]
RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]
RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]
RewriteCond %{HTTP_REFERER} !xianguo.com [NC]
RewriteCond %{HTTP_REFERER} !google.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner.com [NC]
RewriteCond %{HTTP_REFERER} !feedsky.com [NC]
RewriteRule .*/.(gif|jpg)$ http://webeta.cn/no.png [R,NC,L]
簡單的解釋一下上述語句:
1、RewriteCond %{HTTP_REFERER} !^$ [NC]
允許空“HTTP_REFERER”的訪問,即允許使用者在瀏覽器地址欄中直接輸入圖片地址時圖片
檔案的顯示。一般而言,這是可選的,不過,建議這麼設定,如果強迫必須具有
“HTTP_REFERER”才能訪問,可能會帶來某些問題,比如說在使用者通過Proxy 伺服器訪問時
。
2、RewriteCond %{HTTP_REFERER} !webeta.cn [NC]
設定允許訪問的HTTP來源,包括我們的網站自身、Google、Baidu、Bloglines、
Feedburner等。
3、RewriteRule .*/.(gif|jpg|png)$ http://webeta.cn/no.png [R,NC,L]
定義被盜鏈時替代的圖片,讓所有盜鏈 jpg、gif、png 等檔案的網頁,顯示根目錄下的
no.png 檔案。注意:替換顯示的圖片不要放在設定防盜鏈的目錄中,並且該圖片檔案體
積越小越好。當然你也可以不設定替換圖片,而是使用下面的語句即可:
RewriteRule .*/.(gif|jpg|png)$ - [F]
4、說明一下其中的R、NC 和 L
R 就是轉向的意思
NC 指的是不區分大小寫
L 的作用是指明本次轉向到此結束,後續的轉向不受先前判斷語句的影響
5、防止盜鏈的檔案類型
上例中是 gif、jpg、png,而根據需要,可更改或添加其他檔案類型,如rar、mov等,不
同副檔名間使用“|”分割。
這樣的話,就可以基本做到簡單的防止被盜鏈情況的發生,而且可以盡最大可能的減少服
務器流量的無畏消耗,當然了,如果你不在意這點流量的話,那麼可以不用考慮上述設定
啦!
要讓apache防盜串連,首先要讓apache支援.htaccess客戶設定檔案,還要增加
mod_rewrite模組。以下是我的編譯安裝過程。
1. 安裝apache增加mod_rewrite模組
tar xfzv httpd-2.0.54.tar.gz
cd httpd-2.0.54
./configure --prefix=/usr/local/httpd --enable-module=most --enable-shared=max
--enable-rewrite
--enable-rewrite將od_rewrite模組編譯進來
make
make install
查看apache編譯進來的模組
[root@TFP httpd-2.0.54]# /usr/local/httpd/bin/apachectl-l
Compiled in modules:
core.c
mod_access.c //支援.htaccess檔案
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c //已經將od_rewrite編譯進來了
mod_so.c
[root@TFP httpd-2.0.54]#
2.設定apache設定檔httpd.conf
Options FollowSymLinks
AllowOverride All 將None修改為All
AllowOverride All 將None修改為All
修改預設APACHE名去掉#ServerName前的#設定為127.0.0.1
ServerName 127.0.0.1
設定虛擬機器主機
NameVirtualHost 220.202.19.82
DocumentRoot /home/down
ServerName down.sy165.cn
重啟Apache2伺服器
接下就是做一個 .htaccess 檔案了,其 .htaccess 檔案內容為
RewriteEngine on
RewriteCond % !^http://www.xxx.com/.*$[NC]
RewriteCond % !^http://www.xxx.com$[NC]
RewriteRule .*/.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://www.xxx.com/err.htm
[R,NC]
將這個檔案放到/home/down目錄下
RewriteCond % !^http://www.xxx.com/.*$[NC]
只允許通過www.xxx.com/*才能下載down.sy165.cn下的檔案。
RewriteCond % !^http://www.xxx.com$[NC]
只允許通過www.xxx.com才能下載down.sy165.cn下的檔案
RewriteRule .*/.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://www.xxx.com/err.htm
[R,NC]
jpg|jpeg|gif|png|bmp|rar|zip|exe是要保護的內容,如果島串連將跳轉到
http://www.xxx.com/err.htm
沒辦法馬上採取措施,防止盜鏈,以下是從網上找到的方法,經測試有效:
1、假設允許連結圖片的主機網域名稱為:www.eygle.com
2、修改httpd.conf,增加如下配置
SetEnvIfNoCase Referer "^http://www.eygle.com/" local_ref=1
Order Allow,Deny
Allow from env=local_ref
這個簡單的應用不光可以解決圖片盜鏈的問題,稍加修改還可以防止任意檔案盜鏈下載的問題。
使用以上的方法當從非指定的主機連結圖片時,圖片將無法顯示,如果希望顯示一張“禁止盜鏈”的圖片,我們可以用mod_rewrite 來實現。
首先在安裝 apache 時要加上 --enable-rewrite 參數載入 mod_rewrite 模組。
假設“禁止盜鏈”的圖片為www.eygle.com.gif,我們在 httpd.conf 中可以這樣配置:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.eygle.com/.*$ [NC]
RewriteRule /.(jpg|jpg)$ http://www.eygle.com/www.eygle.com.gif [R,L]
當主機的圖片被盜鏈時,只會看到 www.eygle.com.gif 這張圖片!
很抱歉要採取這樣的手段.因為頻寬實在是不允許.
希望沒有影響到大家,對於善意的引用,請大家告訴我網站,我會取消相應的限制.