您当前的位置:首页 > 计算机 > 服务器 > Nginx

Nginx静态资源防盗链

时间:11-09来源:作者:点击数:

文章介绍了资源盗链的概念,通过示例展示了如何利用Nginx的ngx_http_referer_module模块设置资源防盗链,通过检查Referer字段限制外部站点对资源的访问,从而保护网站的静态资源不被非法引用。

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是多模块化的,还有很多高级功能,我们后面继续探索。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐