问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用Nginx为自己的网站资源加上防盗链保护?

发布网友 发布时间:2024-10-05 06:49

我来回答

1个回答

热心网友 时间:2024-11-30 09:23

在这个流量为王的时代,掌握了流量密码,就相当于掌握了一切皆有可能的机遇,但是,越是流量为王,越该保持敬畏之心。

资源在获得流量的过程中扮演着极其重要的角色,如果我们的资源没有适当的保护机制,就会造成很大的损失。为了保护资源,我们可以添加防盗链机制。

Nginx对实现静态资源防盗链机制提供了很好的支持,接下来我们进入实战阶段。主要分为以下两种方式:

在【Nginx静态资源防盗链】一文中,已经详细介绍过实现方法,我们这里简单回顾一下。

当浏览器向web服务器发起资源请求时,会在请求头中带上Referer字段,告诉服务器请求是从哪个页面过来的,服务器根据该信息进行校验并响应。

Nginx为我们提供了ngx_http_referer_mole模块,可以获取请求头中Referer字段,根据字段值返回不同的响应,就可以达到如果不是从我们自己网站发起的请求,就直接返回403禁止访问。

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

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

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

任意字符串 表示请求头中存在Referer字段,且定义了服务器名称和可选的URI前缀。服务器名称的开头或结尾可以有一个“*”。在检查过程中,“Referer”字段中的服务器端口被忽略。例如*.example.com example.* www.example.org/galleries/

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

配置示例

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

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

前面我们提到,在使用Referer信息进行校验的时候,该字段信息可以通过程序伪装生成,并非100%可靠。

Nginx提供了ngx_http_secure_link_mole模块,可以对请求的链接进行真伪校验,并*链接的有效时间。

官方文档: nginx.org/en/docs/http/...

话不多少,开整。

Tips:该模块默认不构建,构建时需要自行添加configure参数--with-http_secure_link_mole。

构建过程,可参照【Nginx基本命令、平滑升级】进行。

资源链接按照约定的规则生成,Nginx服务器对链接进行真伪以及过期时间校验。

ngx_http_secure_link_mole模块为我们提供了两种校验模式:

接下来看看具体配置语法吧。

ngx_http_secure_link_mole模块为我们提供了两种校验模式:

secure_link_secret指令用于指定需要通过MD5算法加密的字符串,同时需要配合$secure_link内置变量来对链接进行校验。

secure_link指令定义需要从URI中取出的参数,包含MD5值和链接的有效时间。需要与secure_link_md 指令配合使用。

secure_link_md5指令定义一个表达式,计算表达式的MD5值,与URI传递的MD5值进行比较。需要配合secure_link指令和$secure_link_expires内置变量一起使用。

$secure_link_expires用于获取secure_link中传递的expires的值。

secure_link与secure_link_md5指令的校验步骤如下:

URI中的signature值可以通过以下方式获取:

1)Ubuntu命令行执行

2)Java代码

引入Apache的commons-codec包

Nginx代理服务器:192.168.110.101

服务端:192.168.110.100

1)访问http://192.168.110.101/img/test.jfif,不满足链接规则,403禁止访问。

2)访问http://192.168.110.101/img/f5b20551b8d06384734de574dd7930ce/test.jfif,满足链接规则。

2)访问http://192.168.110.101/img2/test.jfif?signature=vQ5_wrXQ_oxh5c3L9bbf8g&expires=1685003128,满足链接规则,且链接未过期。

3)访问http://192.168.110.101/img2/test.jfif?signature=JY7G1brnFeEWcNShV74eNA&expires=1684398328,满足链接规则,但链接已过期。

以上就是Nginx实现静态资源防盗链机制的全部内容,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成都汇众益智游戏学院怎么样 为什么苹果手机屏幕老是自动滚上去? roughness test什么意思 国家标准打印纸为每包500张,小雨同学家里新买—包打印 纸,她想练习... 谁知道卡布奇诺含义 卡布奇诺咖啡历史 电脑针式打印纸有哪些规格? 外籍人才招聘 接种甲肝疫苗会出现什么不良反应 中华人民共和国境内的任何人均应接种哪些疫苗 防盗链一种防止盗链的技术 “钟鸣拟寻睡”的出处是哪里 “草木鸣秋妍”的出处是哪里 “草堂流水环”的出处是哪里 “炉峰似见之”的出处是哪里 如何做泡菜 如何制作泡菜 古代皇后自称哀家是什么意思哀家是什么意思 宫里面的皇后是怎么称呼自己的?有没有人知道? 朝鲜和韩国的领土面积是多少 朝鲜和韩国面积各多少 朝鲜和韩国那个领土面积大点? 猜谜语:有点点意见 (打一字)谜底是什么? ex么设置 小巧有主意猜一字 中级职称可以考cpa吗 中医美容中医美容茶配方 中医养生美容 中医美容包括哪些项目 中医美容都有哪些项目 北京北四环保洁阿姨小时工多少钱一个小时? ...家里的wifi连不上apple store, 用电脑的iTunes 也连不上iTunes... 如何做网站的防盗链? 魏建军学术经历 长城cc的平台创始人是谁 防盗链是什么意思? “只凭短句问青天”的出处是哪里 胃部不舒服怎么办?以前没胃病,有什么办法调养! 我有胃病,经常吃不了东西,也不想吃药,有没有什么食疗的办法啊 我得胃病已经几年了~但这段时间经常发痛,可能我没有注意饮食吧,请问我... 缓解胃痛的六款食疗 最近老胃痛,以前从来没有过,可能是吃蒜一次性吃的太多,可是第二天... 这是胃病吗?不想吃药了,要怎么样食疗? 非离子聚丙烯酰胺使用方法 CPU使用率低但温度高是什么原因? 侧方位停车技巧大解析 找准参照物多练习 cpu高温报警是什么原因 坐火车携带香烟数量规定是多少? 过车站可以带多少条烟? 能带五十条香烟上车吗?在市里坐车,一个人带那么多烟吗? 教育指什么