關於 nginx 防盜鏈的方法網上有很多教程,都可以用,但是我發現很多教程並不完整,所做的防盜鏈並不是真正的徹底的防盜鏈!
一般,我們做好防盜鏈之後其他網站盜鏈的本站圖片就會全部失效無法顯示,但是您如果通過瀏覽器直接輸入圖片地址,仍然會顯示圖片,仍然可以右鍵圖片另存為下載檔案!
依然可以下載?這樣就不是徹底的防盜了!那麼,nginx 應該怎麼樣徹底地實現真正意義上的防盜鏈呢?
首先,我們來看下 nginx 如何設定防盜鏈
如果您使用的是預設站點,也就是説,您的站點可以直接輸入站羣服務器 IP 訪問的,使用 root 登入,修改 /usr/local/nginx/conf/nginx.conf 這個配置檔案。
如果您新建了站點,那麼修改/usr/local/nginx/conf/vhost/你的域名.conf 這個配置檔案,找到:
1
2
3
4
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
把這一段刪掉,修改成:
1
2
3
4
5
6
7
8
location ~* .(gif|jpg|png|jpeg)$ {
expires 30d;
valid_referers none blocke *.hugao8.com www.hugao8.com m.hugao8.com *.baidu.com *.google.com;
if ($invalid_referer) {
rewrite ^/ http://ww4.sinaimg.cn/bmiddle/051bbed1gw1egjc4xl7srj20cm08aaa6.jpg;
#return 404;
}
}
第一行: location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
其中 “gif|jpg|jpeg|png|bmp|swf” 設定防盜鏈檔案型別,自行修改,每個字尾用 “|” 符號分開!
第三行:valid_referers none blocked *.it300.com it300.com;
就是白名單,允許檔案鏈出的域名白名單,自行修改成您的域名!*.it300.com 這個指的是子域名,域名與域名之間使用空格隔開!
第五行:rewrite ^/ http://www.it300.com/static/images/404.jpg;
這個圖片是盜鏈返回的圖片,也就是替換盜鏈網站所有盜鏈的圖片。這個圖片要放在沒有設定防盜鏈的網站上,因為防盜鏈的作用,這個圖片如果也放在防盜鏈網站上就會被當作防盜鏈顯示不出來了,盜鏈者的網站所盜鏈圖片會顯示 X 符號。
這樣設定差不多就可以起到防盜鏈作用了,上面説了,這樣並不是徹底地實現真正意義上的防盜鏈!
我們來看第三行:valid_referers none blocked *.it300.com it300.com;
valid_referers 裏多了 “none blocked”
我們把 “none blocked” 刪掉,改成
valid_referers *.it300.com it300.com;
nginx 徹底地實現真正意義上的防盜鏈完整的程式碼應該是這樣的:
1
2
3
4
5
6
7
8
location ~* .(gif|jpg|png|jpeg)$ {
expires 30d;
valid_referers *.hugao8.com www.hugao8.com m.hugao8.com *.baidu.com *.google.com;
if ($invalid_referer) {
rewrite ^/ http://ww4.sinaimg.cn/bmiddle/051bbed1gw1egjc4xl7srj20cm08aaa6.jpg;
#return 404;
}
}
這樣您在瀏覽器直接輸入圖片地址就不會再顯示圖片出來了,也不可能會再右鍵另存什麼的。
第五行:rewrite ^/ http://www.it300.com/static/images/404.jpg;
這個是給圖片防盜鏈設定的防盜鏈返回圖片,如果我們是檔案需要防盜鏈下載,把第五行:
rewrite ^/ http://www.it300.com/static/images/404.jpg;
改成一個連結,可以是您主站的連結,比如把第五行改成:
rewrite ^/ http://www.it300.com;
這樣,當別人輸入檔案下載地址,由於防盜鏈下載的作用就會跳轉到您設定的這個連結!
最後,配置檔案設定完成別忘記重啓 nginx 生效!