Nginx(10)配置防盗链

文章讲述了在HTTP请求中,服务器如何利用Referer头域来检测和防止盗链。尽管Referer头域可以作为防盗链的一种手段,但由于其可被禁用或修改,这种方法并不完全可靠。Nginx的ngx_http_referer_module模块提供了valid_referers指令来配置允许的Referer值,例如限制为特定域名或服务器IP,若不符合条件则返回403禁止访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资完整的回传给客户端。比如在请求一个网页时,首先会回传该网页的文本内容,当客户端浏览器在解析文本的过程中发现有图片存在的时候,会再次向服务器端发起对该图片资源的请求,服务器将存储的图片资源再发送给客户端。在这个过程中,如果该服务器上只包含网页的文本内容,而没有存储相关的图片资源,而是将图片资源链接到了其他站点的服务器上去了,这就形成了盗链问题。

如何设置防盗链呢:要实现防盗链,需要了解HTTP协议中的请求头的Referer头域。
通过该头域的值,可以检测到访问目标资源的源地址。
这样,如果我们检测到Referer头域中的值并不是自己站点内的URL时就采取阻止措施,实现防盗链。

Referer:Referer头域是HTTP请求头的一部分,它包含了当前请求的来源页面的URL。当用户点击一个链接或提交一个表单时,浏览器会在发送请求时自动添加Referer头域,以告诉服务器当前请求的来源。 Referer头域可以用于网站分析、反垃圾邮件、防盗链等方面。但是,由于Referer头域包含了用户的隐私信息,如用户正在访问的页面、用户的搜索关键字等,因此在一些情况下,用户可能会选择禁用或修改Referer头域,以保护自己的隐私。

所以这种方法并不能完全阻止盗链行为。

具体配置:Nginx的ngx_http_referer_module模块中提供了一个指令valid_referers ,用来获取Referer头域中的值并根据该值的情况给Nginx全局变量 $invalid_referer赋值。 如果Referer头域没有符合valid_referers指令配置的值,$invalid_referer 变量将会被赋值为1

语法如下:
valid_referers none | blocked | server_names | string ...;
none: HTTP头中不存在Referer 头域(允许直接访问资源,直接访问资源地址是没有头域的)
blocked: 存在Referer头域,但里面的值有可能由于防火墙或者代理服务器的原因被删除或者伪装。
这种情况下,该头域的值以"http://" 或者 "https://" 开头
server_names: 设置一个或者多个域名, 检测Referer 头域的值是不是这些域名中的某个。支持使用通配符*

location ~* \.(pn?g|gif|gpg|webp)$ { 

             valid_referers none blocked 192.168.220.4;

            if ( $invalid_refere) {

                         teturn     403; 

 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值