Ps:防盜鏈的意義就是保證自己的版權,不免網站的流量流失,為他人做嫁衣。下面是網上看到的三種方法:
修改 /usr/local/nginx/conf/nginx.conf 這個配置文件。
找到
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
修改成如下代碼:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked *.fyunw.com fyunw.com;
if($invalid_referer) {
rewrite ^/ http://www.fyunw.com/404.jpg;
#return404;
}
expires 30d;
}
代碼詳解:
第一行: location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
其中“gif|jpg|jpeg|png|bmp|swf”設置防盜鏈文件類型,自行修改,每個后綴用“|”符號分開!
第三行:valid_referers none blocked *.fyunw.com fyunw.com;
就是白名單,允許文件鏈出的域名白名單,自行修改成您的域名!*.fyunw.com這個指的是子域名,域名與域名之間使用空格隔開!
第五行:rewrite ^/ http://www.fyunw.com/404.jpg;
這個圖片是盜鏈返回的圖片,也就是替換盜鏈網站所有盜鏈的圖片。這個圖片要放在沒有設置防盜鏈的網站上,因為防盜鏈的作用,這個圖片如果也放在防盜鏈網站上就會被當作防盜鏈顯示不出來了,盜鏈者的網站所盜鏈圖片會顯示X符號。
這樣設置差不多就可以起到防盜鏈作用了,上面說了,這樣並不是徹底地實現真正意義上的防盜鏈!
我們來看第三行:valid_referers none blocked *.fyunw.com fyunw.com;
valid_referers 里多了“none blocked”
我們把“none blocked”刪掉,改成
valid_referers *.fyunw.com fyunw.com;
nginx徹底地實現真正意義上的防盜鏈完整的代碼應該是這樣的:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers *.fyunw.com fyunw.com;
if($invalid_referer) {
rewrite ^/ http://www.fyunw.com/404.jpg;
#return404;
}
expires 30d;
這樣您在瀏覽器直接輸入圖片地址就不會再顯示圖片出來了,也不可能會再右鍵另存什么的。
第五行:rewrite ^/ http://www.fyunw.com/404.jpg;
這個是給圖片防盜鏈設置的防盜鏈返回圖片,如果我們是文件需要防盜鏈下載,把第五行:
rewrite ^/ http://www.fyunw.com/404.jpg;
改成一個鏈接,可以是您主站的鏈接,比如把第五行改成小簡博客主頁:
rewrite ^/ http://www.fyunw.com;
這樣,當別人輸入文件下載地址,由於防盜鏈下載的作用就會跳轉到您設置的這個鏈接!
最后,配置文件設置完成別忘記重啟nginx生效!
平滑重啟nginx:
# /etc/init.d/nginx reload
后面幾種方法:
原文:Nginx防盜鏈詳細解說
一般常用的方法是在server或者location段中加入!
valid_referers none blocked www.fyunw.com fyunw.com;
詳見下面的例子
一、針對不同的文件類型
上面那篇文章詳細且經過本人的實踐,卻是可行,網上大都說是
location ~* .(gif|jpg|jpeg|png|bmp|txt|zip|jar|swf)$ {
valid_referers none blocked *.fyunw.com;
if ($invalid_referer) {
rewrite ^/ http://www.fyunw.com/daolian.gif;
#return 403;
}
將這段代碼添加到server段,但是其實后面還有
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
必須將這兩段代碼合成為一段,否則,防盜鏈並不會生效。有點奇怪的是,我開放到防盜鏈開始幾天都是沒出現資金的防盜鏈圖片,過了幾天后才出現的,不知道為什么,知道的也可以告訴我。
二、針對不同的目錄
location /img/ {
root /data/img/;
valid_referers none blocked *.fyunw.com fyunw.com;
if($invalid_referer) {
rewrite ^/ http://www.fyunw.com/images/error.gif;
#return403;
}
}
以上是nginx自帶的防盜鏈功能。
三、nginx 的第三方模塊ngx_http_accesskey_module 來實現下載文件的防盜鏈
安裝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_MODULESngx_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產生的下載路徑格式是:
1.http://*****.com/download/1.zip?key=<?php echo md5(‘mypass’.$_SERVER["REMOTE_ADDR"]);?>
這樣,當訪問沒有跟參數一樣時,其他用戶打開時,就出現:403
NginxHttpAccessKeyModule第三方模塊,實現方法如下:
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.用一下參數重新編譯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為模塊開關;
accesskey_hashmethod為加密方式MD5或者SHA-1;
accesskey_arg為url中的關鍵字參數;
accesskey_signature為加密值,此處為mypass和訪問IP構成的字符串。
訪問測試腳本download.php:
<?php
$ipkey= md5(“mypass”.$_SERVER['REMOTE_ADDR']);
$output_add_key=”<a href=http://www.fyunw.com/download/G3200507120520LM.rar?key=”.$ipkey.”>
download_add_key</a>”;
$output_org_url=”<a href=http://www.fyunw.com/download
/G3200507120520LM.rar>download_org_path</a>”;
echo$output_add_key;
echo$output_org_url;
?>
訪問第一個download_add_key鏈接可以正常下載,第二個鏈接download_org_path會返回403 Forbidden錯誤。
如果不怕麻煩,有條件實現的話,推薦使用Nginx HttpAccessKeyModule這個東西。
他的運行方式是:如我的download 目錄下有一個 file.zip 的文件。對應的URI 是http://www.fyunw.com/download/file.zip
使用ngx_http_accesskey_module 模塊后http://www.fyunw.com/download/file.zip?key=09093abeac094. 只有給定的key值正確了,才能夠下載download目錄下的file.zip。而且 key 值是根據用戶的IP有關的,這樣就可以避免被盜鏈了。
據說Nginx HttpAccessKeyModule現在連迅雷都可以防了,可以嘗試一下。
下載:
Nginx 0.8.51 穩定版下載:nginx-0.8.51,nginx/Windows-0.8.51
HttpAccessKeyModule第三方模塊下載:http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz