nginx防盜鏈

    我們經常會看到在瀏覽某一圖片時會彈出一“403權限禁止”錯誤,這說明有可能正在瀏覽的這個網站用到的圖片在盜用別的網站圖片,而被盜用的網站採用了防盜鏈技術。那麼怎樣才能不讓自己的網站受害呢?

    這裏講述的是nginx防盜鏈技術,是nginx。nginx的具體安裝以及相關的優化在這裏不多說了。我用一臺nginx服務器模擬後端服務器,這臺nginx主要用作圖片、gif、swf等靜態服務器(會在這臺服務器上對這些靜態文件做防盜鏈技術),ip地址爲192.168.0.116;又用了一臺apache服務器作爲前端服務器(用apache做前端不是好的選擇,一般都會用nginx做前端,但我這裏只是爲了模擬,這裏的前端服務器僅僅提供一個簡單的主頁界面而已),ip地址爲192.168.0.115。

    在nginx服務器上面的操作:

[root@nginx conf]# cat nginx.conf    ///nginx的主配置文件

user  nobody;

worker_processes  1;


pid        logs/nginx.pid;


events {

    worker_connections  65535;

    use epoll;

}


http {

    include       mime.types;

    default_type  application/octet-stream;


    sendfile        on;

    keepalive_timeout  65;


    gzip  on;


    include extra/daolian.conf;    ///我把防盜鏈技術配置文件獨立出來了,這只是一個習慣而已,可以不把配置文件獨立出來而是把它們全部放到nginx.conf的http節點裏面。

}

   

root@nginx extra]# cat daolian.conf     ///防盜鏈的具體配置文件放在了/usr/local/nginx/conf/extra目錄下面。

server {

    listen 80;

    server_name 192.168.0.116;    ///被訪問的域名


    location ~*.(gif|jpg|png|swf|flv)$ {    ///定義對gif/jpg/png/swf/flv等靜態頁面進行防盜

root /usr/local/nginx/html;    ///指定上述靜態頁面放在的位置

valid_referers none blocked 192.168.0.115;    ///指定哪個域名可以訪問本靜態服務器,也可以是ip地址,這裏我指定的是192.168.0.115,也就是內部的前端apache服務器,只允許這臺訪問。

if ($invalid_referer) {

   return 403;    ///如果有其他機器訪問這臺nginx服務器就會給那臺機器返回一個403訪問禁止的頁面,也就是說如果出現了盜用現象就提示403錯誤。

}

    }

}


然後在/usr/local/nginx/html目錄下放一張0.jpg的照片作爲測試用(因爲這臺nginx服務器就是用來做後端靜態服務器用的,放這張照片僅模擬gif、jpg、swf等諸多靜態頁面。

 

[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload    ///重啓nginx服務器,使配置文件生效。

到這裏nginx服務器的配置完成,下面對apache服務器進行配置:

[root@apache htdocs]# cat index.html    ///我在apache服務器的/usr/local/apache2/htdocs目錄下創建這個主頁,作爲遠端客戶訪問本網站的入口用,即遠在天涯海角的客戶端要想訪問本網站的內容只需要訪問192.168.0.115就可以進去網站然後訪問所有的內容了。

<html>

<head>

<title>fang dao lian test</title>

</head>

<body>

<font size="10">

<a href="http://192.168.0.116/0.jpg">dao lian picture</a>  ///做一個鏈接,鏈接後端nginx靜態服務器

<br></br>

</font>

</body>

</html>


[root@apache htdocs]# /usr/local/apache2/bin/apachectl -k restart    ///重啓apache,使配置生效。


現在可以在客戶端瀏覽192.168.0.115測試了,見下圖效果:

wKioL1PmHtKBFUGeAAF30PBr09E579.jpg

在客戶端瀏覽器上輸入網站前端apache的ip時出現了apache的主頁,點擊一下:wKiom1PmHf_TEBTXAAHWbxD0Wb8981.jpg

點擊之後,瀏覽器正確的到後端nginx服務器找到了需要的照片,瀏覽器中的域名也隨之變成了192.168.0.116,這表示內部的跳轉成功了。分別分析兩臺服務器的訪問日誌也能發現有人訪問了。


    下面做一次,假設本網站的前端服務器域名是www.xiaowei.com,不是192.168.0.115了,即192.168.0.115是其他公司的網站服務器,當有人訪問其他公司的那個192.168.0.115服務器時,而這臺服務器還想着要來到192.168.0.116這臺nginx服務器上面調用0.jpg這張照片,同時192.168.0.116這臺服務器做了盜鏈技術,192.168.0.116只允許www.xiaowei.com這個自己的域名訪問,其他公司的ip若要訪問時就視爲盜用然後返回一個錯誤值,具體做法如下:    

[root@nginx extra]# cat daolian.conf     ///只需要修改這個配置文件就行啦

server {

    listen 80;

    server_name 192.168.0.116;


    location ~*.(gif|jpg|png|swf|flv)$ {

root /usr/local/nginx/html;

valid_referers none blocked www.xiaowei.com;    ///只需要將這裏的域名修改成www.xiaowei.com就可以啦,其他配置其他文件都不需要修改

if ($invalid_referer) {

   return 403;

}

    }

}


[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload

再次在客戶端上訪問192.168.0.115,再次點擊鏈接時,發現彈出了403訪問禁止權限,見下圖,因爲這裏的”陌生“的服務器192.168.0.115盜用了192.168.0.116,而192.168.0.116做了防盜鏈技術:

wKiom1PmIQ7RzhvrAAGXz8IkIYo363.jpg

    到這裏,如果出現了盜用現象,我就給它弄了403訪問禁止的頁面,可不可以把它直接跳到自己網站的主頁呢?當然可以了,假設我的網站的默認主頁是www.hfuu.edu.cn,如果出現了盜用現象,那麼客戶端那面隨之就會看到www.hfuu.edu.cn這個主頁,做法如下:    

[root@nginx extra]# cat daolian.conf 

server {

    listen 80;

    server_name 192.168.0.116;


    location ~*.(gif|jpg|png|swf|flv)$ {

root /usr/local/nginx/html;

valid_referers none blocked www.xiaowei.com;    ///這一行仍舊設置成只允許自己的域名訪問

if ($invalid_referer) {

#    return 403;

   rewrite ^.*$ http://www.hfuu.edu.cn;    ///如果出現了盜用,就直接把用戶的訪問轉到了自己的主頁,這樣做不僅避免了盜用,也增加了自己的pv。

}

    }

}

[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload

客戶端再次訪問,點擊鏈接時,發現瀏覽器自動跳轉到了”自己的網站主頁“www.hfuu.edu.cn,見下圖:    

wKiom1PmIweSvXyHAAMiTGRxz3E124.jpg

這表明如果出現了盜鏈,用戶訪問會成功跳轉到其他頁面。


到這裏,nginx的防盜鏈技術描述完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章