美文网首页
nginx 防盗链简单配置

nginx 防盗链简单配置

作者: 十年磨一剑1111 | 来源:发表于2020-09-21 14:20 被阅读0次

    通常我们不希望自己网站的图片、文件等被一些未经允许的网站应用,那么我们可以在nginx里做一些配置来阻止这些网站的访问。

    1. 理论

    我们将使用nginx的valid_referers 指令来做防盗链,下面来简单介绍下valid_referers指令。
    语法:
    valid_referers [none|blocked|server_names] ...
    默认值:none
    使用环境:server,location
    该指令会根据Referer Header头的内容分配一个值为0或1给变量$invalid_referer。如果Referer Header头不符合valid_referers指令设置的有效Referer,变量$invalid_referer将被设置为1.
    该指令的参数可以为下面的内容:
    none:表示无Referer值的情况。
    blocked:表示Referer值被防火墙进行伪装。
    server_names:表示一个或多个主机名称。从Nginx 0.5.33版本开始,server_names中可以使用通配符"*"号。
    简单介绍完后小伙伴们可能会想为啥要用这个参数做防盗链呢?
    我们知道HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。下面我们在浏览器里面打开几个页面来体验下这个参数

    referer.png
    不过需要注意的是 HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer信息防盗链并非100%可靠,但是,它能够限制大部分的盗链。

    2.实践

    下面我们准备一张图片test.jpg,和两台服务器,注意笔者的nginx版本是1.17的,不同的版本可能配置稍微有点不同。
    服务器A:47.93.121.3
    服务器B:175.24.110.203

    笔者将图片test.php 放到服务器A上,并能够正常访问


    图片.png

    接着我们在服务器B上写一个test.htm来引用这张图片:

     <html>
       <body>
          <img src="http://47.93.121.3/images/test.jpg" width="200px"  />
       </body>
     </html>
    

    访问看下:


    图片.png

    能够正常访问。
    但是我们希望服务器B在没有经过允许的情况下不能访问这张图片,那我们就需要配置下服务器A的nginx

    ...
    location ~.*\.(jpg|png|gif|jpeg)$ {
         valid_referers none 47.93.121.3;
         if ($invalid_referer) {
            return 403;
         }
    }
    ...
    

    那我们再在服务器B上看还能不能访问到这张图片:


    图片.png

    发现已经不能访问这张图片,那我们再看看服务器A能不能访问:


    图片.png
    发现是可以访问的,说明配置成功。
    那本篇文章就到此了,有问题或者不对的地方,还请给我小伙伴提供意见。

    相关文章

      网友评论

          本文标题:nginx 防盗链简单配置

          本文链接:https://www.haomeiwen.com/subject/mvbpyktx.html