nginx 防盜鏈


    一篇很好的nginx防盜鏈文章,複製過來學習,連接地址:http://4593973.blog.51cto.com/4583973/1537963html


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

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

    在nginx服務器上面的操做:apache

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

user  nobody;瀏覽器

worker_processes  1;服務器


pid        logs/nginx.pid;app


events {ide

    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的防盜鏈技術描述完成。

相關文章
相關標籤/搜索