返回顶部

[文摘] Nginx防盗链设置

[复制链接]
awagink 显示全部楼层 发表于 2020-4-6 10:00:04 |阅读模式 打印 上一主题 下一主题
Nginx防盗链

原创luffy5459 最后发布于2019-02-14 16:35:25 阅读数 1813  收藏

展开

防盗链的概念很早就听过,一直没有做过研究,这里谈谈学习之后的理解。



概述:



对于图片来说,A网站,如果想使用B网站的图片,可以直接写上B网站图片的链接地址,或者将B网站的图片通过右键另存为的方式下载到本地,然后在页面上使用。如果B网站不想A网站这么干了,那么B网站可以采取防盗链的措施来干这个工作,结果就是,A网站想请求所需要的资源,通过url的方式,获取的可能不是原来的图片了,出现404或者别的图片替代了。如果通过浏览器直接打开图片url,那么仍然有可能显示404,这就是防盗链。



Nginx可以很好的做这个工作,先介绍防盗链的nginx location配置:



  1. location ~* \.(jpg)$ {

  2.     root        html;

  3.     valid_referers   192.168.42.135;

  4.     if ($invalid_referer){
  5.     rewrite ^/   ;
  6.     }

  7. }
复制代码




配置截图:


1.png




该配置是说过滤请求jpg的,并且不是虚拟机本机的IP的访问。对于png图片,可以随意访问。



测试思路:准备三张图片,分别是avatar.jpg,访问这个图片,如果做了防盗链,那么会请求到loading.png(第二张),当请求image.png(第三张)时,他不在防盗链的规则里面,所以可以正常访问。



测试过程:



1、所需的资源,本机以及虚拟机,本机启动一个http服务,这里使用python3启动一个简单的HTTP服务。虚拟机通过nginx来启动一个web http服务。物理机上访问本地index.html,页面内容如下:



  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4.         <meta charset="UTF-8">

  5.         <title>index</title>

  6.         <style type="text/css">

  7.                 *{margin:0;padding:0;}

  8.                 .avatar{width:200px;overflow: hidden;border:1px solid lightblue;}

  9.                 img{width:100%;display: block;}

  10.         </style>

  11. </head>

  12. <body>

  13.         <h2>hello,this is a server by python http</h2>

  14.         <div class="avatar">

  15.                 <img src="http://192.168.42.135/images/avatar.jpg" alt="设置防盗链">

  16.         </div>

  17.         <div class="avatar">

  18.                 <img src="http://192.168.42.135/images/image.png" alt="没有防盗链">

  19.         </div>

  20. </body>

  21. </html>
复制代码


2、本机在index.html所在的目录启动http服务:
2.png






3、虚拟机nginx目录的html目录下准备index.html,images文件夹,images文件夹中准备三个文件,分别是avatar.jpg,loading.png,image.png。



index.html



  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4. <title>Welcome to OpenResty!</title>

  5. <style>

  6.    *{margin:0;padding:0}

  7.    .avatar{width:200px;overflow:hidden;border:1px solid lightblue;}

  8.    img{width:100%;display:block;}

  9. </style>

  10. </head>

  11. <body>

  12. <h2>welcome to nginx!</h2>

  13.   <div class="avatar"><img src="http://192.168.42.135/images/avatar.jpg"/></div>

  14.   <div class="avatar"><img src="http://192.168.42.135/images/image.png"/></div>

  15. </body>

  16. </html>
复制代码


html目录下的内容:


3.png




4、启动nginx,我们分别通过本地ip地址访问本机的index.html,以及通过虚拟机的ip访问虚拟机nginx:



本地访问:http://10.119.9.167:8000/



虚拟机访问:http://192.168.42.135/



没有做防盗链设置的时候,访问图片,没有太大的区别:



4.gif



做了防盗链,本机访问虚拟机的图片地址,会显示loading图片,而直接访问虚拟机nginx首页就不会出现loading图片:




5.gif


对于本例中做了防盗链配置的情况,不容许referer为空,即通过浏览器直接打开图片的情况,会看到,先请求了avatar.jpg,最终会响应302跳转到loading.png:











这个示例,就演示了防盗链是如何实现的。



一般的防盗链,我们的配置如下:



  1. location ~* \.(gif|jpg|swf)$ {

  2.      valid_referers none blocked start.igrow.cn sta.igrow.cn;

  3.      if ($invalid_referer) {

  4.           rewrite ^/ http://$host/logo.png;

  5.       }

  6. }
复制代码




nginx防盗链是通过分析访问资源的源网站,即referer来自哪里:

6.png

通过浏览器直接打开img的url,这时候是没有referer的,如果容许这一类,那么配置valid_referers可以包括none。

如果referer不为空,但是里面的内容被防火墙或者代理服务器删除了,也容许这一类的话,可以通过配置blocked来绕过。

如果通过网站来打开,比如:http://10.119.9.167:8000/,那么请求图片的请求,中会携带referer,我们如果容许,可以把需要绕过的域名在这里写上。

通过网站引用图片的,我们通过开发者工具可以清楚的看到请求的Referer:


7.png




valid_referers none blocked start.igrow.cn sta.igrow.cn :这个防盗链的配置,是说容许浏览器打开,容许referer有内容但被防火墙删除了,容许来自start.igrow.cn、sta.igrow.cn网站的请求。



本示例中,为了防止浏览器打开,只容许虚拟机IP所在的机器上的网站访问图片,所以只是简单的配置了:



valid_referers 192.168.42.135;



到这里,防盗链的内容就差不多介绍完了。基本思路就是过滤不信任的网站请求有关的图片。

————————————————

版权声明:本文为CSDN博主「luffy5459」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/feinifi/java/article/details/87276478
您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ