nginx服務(wù)器防盜鏈設(shè)置教程 (nginx圖片防盜鏈操作)
Nginx 是一個很牛的高性能Web和反向代理服務(wù)器, 它具有有很多非常優(yōu)越的特性; 在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯的替代品,目前Web服務(wù)器調(diào)查顯示Apache下降Ngnix攀升,linux下更多的服務(wù)商選擇了Ngnix放棄了Apache; Nginx在美國是做虛擬主機(jī)生意的老板們經(jīng)常選擇的軟件平臺之一. 能夠支持高達(dá) 50,000 個并發(fā)連接數(shù)的響應(yīng), 感謝Nginx為我們選擇了 epoll and kqueue作為開發(fā)模型. 目前中國大陸使用nginx網(wǎng)站用戶有:新浪、網(wǎng)易、 騰訊,另外知名的微網(wǎng)志Plurk也使用nginx。
一般常用的方法是在server或者location段中加入!
valid_referers none blocked www.hao251.com hao251.com;
詳見下面的例子
其中 none 表示 空的來路,也就是直接訪問,比如直接在瀏覽器打開一個圖片
blocked 表示被防火墻標(biāo)記過的來路
server_names 也就是域名了。0.5.33以后的版本中,可以用*.hao251.com來表示所有的二級域名
一。針對不同的文件類型
location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
valid_referers none blocked *.hao251.com hao251.com;
if ($invalid_referer) {
#rewrite ^/ http://www.hao251.com/error.html;
return 403;
}
}
第一行:wma|gif|jpg|png|swf|flv
表示對wma、gif、jpg、png、swf、flv后綴的文件實(shí)行防盜鏈
第二行:*.hao251.com hao251.com
表示對*.hao251.com hao251.com這2個來路進(jìn)行判斷(*代表任何,任何的二級域名),你可以添加更多
if{}里面內(nèi)容的意思是,如果來路不是指定來路就跳轉(zhuǎn)到403錯誤頁面,當(dāng)然直接返回404也是可以的,也可以是圖片。
二。針對不同的目錄
location /img/ {
root /data/img/;
valid_referers none blocked *.hao251.com hao251.com;
if ($invalid_referer) {
rewrite ^/ http://www.hao251.com/images/error.gif;
#return 403;
}
}
三。以上是nginx自帶的防盜鏈功能,另外還可以利用 nginx 的第三方模塊 ngx_http_accesskey_module 來實(shí)現(xiàn)下載文件的防盜鏈
安裝Nginx和nginx-http-access模塊
#tar zxvf nginx-0.7.61.tar.gz
#cd nginx-0.7.61/
#tar xvfz nginx-accesskey-2.0.3.tar.gz
#cd nginx-accesskey-2.0.3
#vi config
#把HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESSKEY_MODULE" 修改成HTTP_MODULES="$HTTP_MODULES ngx_http_accesskey_module" (這是此模塊的一個bug)
#./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-accesskey-2.0.3
編譯成功后,在主配置文件加入類似下面的代碼:
server{
.....
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
}
/download 為你下載的目錄。
前臺php產(chǎn)生的下載路徑格式是:
1.http://*****.com/download/1.zip?key=<?php echo md5('mypass'.$_SERVER["REMOTE_ADDR"]);?>
這樣,當(dāng)訪問沒有跟參數(shù)一樣時,其他用戶打開時,就出現(xiàn):403
NginxHttpAccessKeyModule第三方模塊。實(shí)現(xiàn)方法如下:
1. 下載Nginx HttpAccessKeyModule模塊文件:Nginx-accesskey-2.0.3.tar.gz;
2. 解壓此文件后,找到nginx-accesskey-2.0.3下的config文件。編輯此文件:替換其中的"$HTTP_ACCESSKEY_MODULE"為"ngx_http_accesskey_module";
3. 用一下參數(shù)重新編譯nginx:
./configure --add-module=path/to/nginx-accesskey
4. 修改nginx的conf文件,添加以下幾行:
location /download {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "mypass$remote_addr";
}
其中:
accesskey為模塊開關(guān);
accesskey_hashmethod為加密方式MD5或者SHA-1;
accesskey_arg為url中的關(guān)鍵字參數(shù);
accesskey_signature為加密值,此處為mypass和訪問IP構(gòu)成的字符串。
訪問測試腳本download.php:
<?
$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);
$output_add_key="<a href=http://www.example.cn/download/G3200507120520LM.rar?key=".$ipkey.">download_add_key</a><br />";
$output_org_url="<a href=http://www.example.cn/download/G3200507120520LM.rar>download_org_path</a><br />";
echo $output_add_key;
echo $output_org_url;
?>
訪問第一個download_add_key鏈接可以正常下載,第二個鏈接download_org_path會返回403 Forbidden錯誤。
如果不怕麻煩,有條件實(shí)現(xiàn)的話,推薦使用Nginx HttpAccessKeyModule這個東西。
他的運(yùn)行方式是:如我的download 目錄下有一個 file.zip 的文件。對應(yīng)的URI 是http://www.hao251.com/download/file.zip
使用ngx_http_accesskey_module 模塊后http://www.hao251.com/download/file.zip?key=09093abeac094. 只有給定的key值正確了,才能夠下載download目錄下的file.zip。而且 key 值是根據(jù)用戶的IP有關(guān)的,這樣就可以避免被盜鏈了。
據(jù)說Nginx HttpAccessKeyModule現(xiàn)在連迅雷都可以防了,可以嘗試一下。
下載:
Nginx 0.8.51 穩(wěn)定版下載:nginx-0.8.51,nginx/Windows-0.8.51
HttpAccessKeyModule第三方模塊下載:http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
關(guān)鍵詞:nginx,服務(wù)器防盜鏈
閱讀本文后您有什么感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 0
- 0