首页 > 系统相关 >十、Nginx防盗链设计

十、Nginx防盗链设计

时间:2023-09-12 14:04:13浏览次数:45  
标签:referers http Nginx valid 设计 防盗链 blocked

先了解一下何谓盗链:「「盗链即是指外部网站引入当前网站的资源对外展示」」 ,来举个简单的例子理解:

好比壁纸网站X站、Y站,X站是一点点去购买版权、签约作者的方式,从而积累了海量的壁纸素材,但Y站由于资金等各方面的原因,就直接通过<img src="X站/xxx.jpg" />这种方式照搬了X站的所有壁纸资源,继而提供给用户下载。

那么如果我们自己是这个X站的Boss,心中必然不爽,那么此时又该如何屏蔽这类问题呢?那么接下来要叙说的「「防盗链」」 登场了!

Nginx的防盗链机制实现,跟一个头部字段:Referer有关,该字段主要描述了当前请求是从哪儿发出的,那么在Nginx中就可获取该值,然后判断是否为本站的资源引用请求,如果不是则不允许访问。Nginx中存在一个配置项为valid_referers,正好可以满足前面的需求,语法如下:

valid_referers none | blocked | server_names | string ...;
  • none:表示接受没有Referer字段的HTTP请求访问。
  • blocked:表示允许http://https//以外的请求访问。
  • server_names:资源的白名单,这里可以指定允许访问的域名。
  • string:可自定义字符串,支配通配符、正则表达式写法。

简单了解语法后,接下来的实现如下:

# 在动静分离的location中开启防盗链机制  
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css){  
    # 最后面的值在上线前可配置为允许的域名地址  
    valid_referers blocked 192.168.12.129;  
    if ($invalid_referer) {  
        # 可以配置成返回一张禁止盗取的图片  
        # rewrite   ^/ http://xx.xx.com/NO.jpg;  
        # 也可直接返回403  
        return   403;  
    }  
      
    root   /soft/nginx/static_resources;  
    expires 7d;  
}

根据上述中的内容配置后,就已经通过Nginx实现了最基本的防盗链机制,最后只需要额外重启一下就好啦!当然,对于防盗链机制实现这块,也有专门的第三方模块ngx_http_accesskey_module实现了更为完善的设计,感兴趣的小伙伴可以自行去看看。

PS:防盗链机制也无法解决爬虫伪造referers信息的这种方式抓取数据。

标签:referers,http,Nginx,valid,设计,防盗链,blocked
From: https://blog.51cto.com/yangshaoping/7445058

相关文章

  • 十一、Nginx大文件传输配置
    某些业务场景中需要传输一些大文件,但大文件传输时往往都会会出现一些Bug,比如文件超出限制、文件传输过程中请求超时等,那么此时就可以在Nginx稍微做一些配置,先来了解一些关于大文件传输时可能会用的配置项:在传输大文件时,client_max_body_size、client_header_timeout、proxy_read_ti......
  • 十二、Nginx配置SSL证书
    随着越来越多的网站接入HTTPS,因此Nginx中仅配置HTTP还不够,往往还需要监听443端口的请求,HTTPS为了确保通信安全,所以服务端需配置对应的数字证书,当项目使用Nginx作为网关时,那么证书在Nginx中也需要配置,接下来简单聊一下关于SSL证书配置过程:①先去CA机构或从云控制台中申请对应的SSL证......
  • Android开发中常见的设计模式
    Android开发中常见的设计模式对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次。而在android开发中,必要的了解一些设计模式又是非常有必要的。对于想系统的学习设计模式的同学,这里推荐2本书。一本是HeadFirst系列的HeadH......
  • 如何设计一个极简支付系统
    如何设计一个极简支付系统第一步当用户点击“购买”按钮时,会生成一个支付事件(PaymentEvent)并发送到支付服务。第二步支付服务(PaymentService)将支付事件存储在数据库中。第三步单个支付事件可能包含多个支付订单。比如,我们结账时会从多个卖家选择商品。这时,支付服......
  • 系统设计面试终极指南
    我们精心整理了系统设计面试的模版,覆盖了面试中的各种系统设计问题,包含:负载均衡API网关通信协议内容分发网络(CDN)数据库缓存消息队列唯一ID生成器可扩展性高可用性性能安全性容错性和弹性如果你对细节感兴趣,欢迎留言告诉我。【关注公众号:ByteByteGo】 ......
  • DC电源模块对设计和布线的重要性
    BOSHIDADC电源模块对设计和布线的重要性在电子设备中,DC电源模块的作用是将市电或其他源的交流电转换成适合设备使用的直流电,因此,DC电源模块是电子设备中不可或缺的一个部分。在实际设计和应用中,DC电源模块的设计和布线显得尤为重要,下面详细介绍其重要性。1.设计重要性DC电源模......
  • 软件设计模式系列之三———工厂方法模式
    1模式的定义工厂方法模式是一种常见的设计模式,属于创建型设计模式之一,它在软件工程中用于对象的创建。该模式的主要思想是将对象的创建过程抽象化,将具体对象的实例化延迟到子类中完成,以便在不同情况下可以创建不同类型的对象,而客户端代码不需要知道实际创建的对象类型。2举例......
  • 存储管理系统设计
    存储管理系统设计一、Dcache设计数据cache是一块只读的cache,主要负责缓存处理器操作所需要的数据。该cache选择4路组相连的方式,容量为32KB,行大小为8个字,采用lru替换算法。其结构同样分为存储体和控制器两部分。​ 访问地址位32位,其中​低5位表示行内偏移,​......
  • Nginx配置文件详细说明
    在此记录下Nginx服务器nginx.conf的配置文件说明,部分注释收集与网络.#运行用户userwww-data;#启动进程,通常设置成和cpu的数量相等worker_processes1;#全局错误日志及PID文件error_log/var/log/nginx/error.log;pid/var/run/nginx.pid;#工作模式及连接数上......
  • Nginx安装部署
    Nginx("enginex") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 IgorSysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、......