一般,我們做好防盜鏈之后其他網站盜鏈的本站圖片就會全部失效無法顯示,但是您如果通過瀏覽器直接輸入圖片地址,仍然會顯示圖片,仍然可以右鍵圖片另存為下載文件!依然可以下載?這樣就不是徹底的防盜鏈了!
1 [root@web01 vhosts]# cat default.conf 2 server { 3 listen 80 default_server; 4 server_name 192.168.1.24 web01.espressos.cn *.qq.com *.baidu.com; 5 root /app/www; 6 index index.php index.html index.htm; 7 location ~* \.(gif|jpg|png|swf|flv)$ { 8 valid_referers none blocked *.espressos.cn; 9 if ($invalid_referer) { 10 rewrite ^/ http://192.168.1.25/404.jpg; 11 #return 404; 12 } 13 } 14 location ~ .*\.(php|php5)?$ 15 { 16 #fastcgi_pass unix:/tmp/php-cgi.sock; 17 fastcgi_pass 127.0.0.1:9000; 18 fastcgi_index index.php; 19 include fastcgi.conf; 20 } 21 access_log /app/log/nginx/access/default.log; 22 }
注意第8行 “valid_referers none blocked" 其中"none" "blocked" 的意思分別是:
none代表沒有referer;blocded代表有referer但是被防火牆或者是代理給去除了。
首先當我輸入我要打開的網址的時候,因為是直接輸入的沒有referer所以匹配了 valid_referers后面的none或者是blocked 所以invalid_referer值為0 所以不進行跳轉. 當我是從這個網站里面的鏈接跳到該網站首頁的時候 因為referer的值是肯定包含srever_names 所以匹配了server_names所以不進行跳轉。 當我從搜素引擎進去的時候因為referer字段類似於www.google.com.hk/search 開始進行匹配 發現沒有一個匹配,則此時會設置invalid_referer值為1 if語句成功執行,進行了跳轉. 達到功能
如果把這兩個(none,blocked)去掉就可以真正的實現防盜連了!因為只有匹配到server_name的時候,才不會進行跳轉。如下面實例:

[root@web01 www]# cat index.html <html> <body> <h1>hello world bass!! </h1> <img alt="bass.png" src="/bass.png" height="auto" width="auto"></img> </body> </html>
接真輸入圖片地址可以顯示圖片:

1 [root@web01 www]# cat /app/server/nginx/conf/vhosts/default.conf 2 server { 3 listen 80 default_server; 4 server_name 192.168.1.24 web01.espressos.cn *.qq.com *.baidu.com; 5 root /app/www; 6 index index.php index.html index.htm; 7 location ~* \.(gif|jpg|png|swf|flv)$ { 8 valid_referers *.espressos.cn; 9 if ($invalid_referer) { 10 rewrite ^/ http://192.168.1.25/404.jpg; 11 #return 404; 12 } 13 } 14 location ~ .*\.(php|php5)?$ 15 { 16 #fastcgi_pass unix:/tmp/php-cgi.sock; 17 fastcgi_pass 127.0.0.1:9000; 18 fastcgi_index index.php; 19 include fastcgi.conf; 20 } 21 access_log /app/log/nginx/access/default.log; 22 }
注意第8號:8 valid_referers *.espressos.cn;去掉了none,blocked:(效果如下)

當再次輸入web01.espressos.cn/bass.png時發生跳轉到192.168.1.25/404.jpg:

這才實現了完美的防盜鏈!!
請確保server段中只有一個location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$,否則可能導致代碼無效,如有這個代碼段請合並或刪除。
切記:如果要跳轉到圖片,記得替換的圖片地址要使用沒有防盜鏈的網站圖片,否則由於替換的圖片其實也處於防盜鏈情況下,會造成仍舊無法顯示設置的圖片。
