nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx静态资源防盗链

Nginx静态资源防盗链配置详解

作者:fkjavaer

这篇文章主要为大家介绍了Nginx静态资源防盗链如何配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

1.什么是资源盗链

简单地说,就是将别人的资源用到自己的页面展示给用户。

2.效果演示

1)准备图片

这两张图片直接在浏览器中访问都是可以打开的。

github图片地址:

https://github.githubassets.com/images/modules/site/home-campaign/hero-drone.webp 

豆瓣图片地址:

https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2889598060.webp

2)html准备

cd /usr/local/nginx/html
touch test.html

test.html

<!DOCTYPE html>
<html>
    <body>
        <img src="https://github.githubassets.com/images/modules/site/home-campaign/hero-drone.webp"/>
        <br/ >
        <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2889598060.webp" alt="douban">
    </body>
</html>

展示效果:访问

http://192.168.110.98/test.html

查看控制台:

 说明douban的图片资源做了防盗链处理。

那么我们自己的资源如何做防盗链处理呢?

3.资源防盗链

关于资源防盗链,我们需要先理解一个概念,那就是请求头中的Referer字段信息,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从那个页面过来的,web服务器根据这个信息进行一些处理,资源防盗链的处理也是根据该字段信息进行相应处理。

Tips:请求头的Referer字段信息是可以通过程序伪装生成的,因此根据Referer信息来实现防盗链并非100%可靠,但是,它能够限制大部分的盗链。

1)准备资源

test.jfif图片:

2)将资源放到nginx服务器的/usr/local/nginx/html文件夹

3)准备test.html页面

<!DOCTYPE html>
<html>
    <body>
        <img src="./test.jfif" alt="test">
    </body>
</html>

4)访问页面

http://192.168.110.98/test.html

可以看到,目前的我们的资源是可以正常访问的,接下来,我们将做一些防盗链的措施。

我们知道web服务器是根据请求头的Referer字段值来判断请求是从哪个页面发送过来的,nginx提供了ngx_http_referer_module模块,来对该信息进行处理。

下面我们来看看相关语法:

作用域:server, location

语法:valid_referers none | blocked | server_names | string ...;

1)valid_referers none;

表示请求头中不存在Referer字段。

2)valid_referers blocked;

表示请求头中存在Referer字段,且其值不以http://或https://开头

3)valid_referers server_names;

表示请求头中存在Referer字段,且其值包含nginx配置文件中server_name的其中一个

4)任意字符串

表示请求头中存在Referer字段,且定义了服务器名称和可选的URI前缀。服务器名称的开头或结尾可以有一个“*”。在检查过程中,“Referer”字段中的服务器端口被忽略;

5)正则表达式

表示请求头中存在Referer字段,且第一个符号应该是“~”。需要注意的是,表达式将从http://或https://之后开始的文本相匹配。

示例:

valid_referers none blocked server_names *.example.com test.example.* ~\.example\.com

除了使用valid_referers指令外,我们还需要用到一个变量$invalid_referer,如果“Referer”请求标头字段值被认为有效,则为空字符串,否则为“1”。

5)配置资源防盗链

因为我们现在要访问test.gfif图片,所以我们如下配置:

location ~^/.*\.(png|jpg|gif|jfif) {
    valid_referers www.example.com;
    if ($invalid_referer){
        return 403;
    }
    root   html;
}

Tips:正则表达式必须以~开头。

这个时候我们再来访问

http://192.168.110.98/test.html,显示无法访问。

我们查看其请求头的Referer字段:

Referer:http://192.168.110.98/test.html,因此被拒绝访问了。

以上就是Nginx配置静态资源防盗链,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。

更多关于Nginx静态资源防盗链的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文