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的防盗链技术描述完成。

相关文章
相关标签/搜索