完美的nginx圖片防盜鏈設置詳解

 

通常,咱們作好防盜鏈以後其餘網站盜鏈的本站圖片就會所有失效沒法顯示,可是您若是經過瀏覽器直接輸入圖片地址,仍然會顯示圖片,仍然能夠右鍵圖片另存爲下載文件!依然能夠下載?這樣就不是完全的防盜鏈了!php

 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" 的意思分別是:html

none表明沒有referer;blocded表明有referer可是被防火牆或者是代理給去除了。nginx

首先當我輸入我要打開的網址的時候,由於是直接輸入的沒有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的時候,纔不會進行跳轉。以下面實例:web

[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:(效果以下)app

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

這才實現了完美的防盜鏈!!google

   請確保server段中只有一個location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$,不然可能致使代碼無效,若有這個代碼段請合併或刪除。
    切記:若是要跳轉到圖片,記得替換的圖片地址要使用沒有防盜鏈的網站圖片,不然因爲替換的圖片其實也處於防盜鏈狀況下,會形成仍舊沒法顯示設置的圖片。
相關文章
相關標籤/搜索