前言

  在项目中,经常会有不想让本站点的静态资源被他人盗取访问的需求。比如网站中的图片,前端加载的一些js文件等。此时,就可以配置nginx的防盗链来实现网站资源的防盗。
  当然,此方案的前提是前端资源的访问是经过nginx的。


一、配置防盗链之前的效果

1. nginx原始配置

  nginx部分配置如下,会将域名的请求转发到实际服务器上

location ^~ /test/ {proxy_pass http://test;proxy_set_header Host $host:$server_port;proxy_connect_timeout 3000s;proxy_send_timeout 3000s;proxy_read_timeout 3000s;
}

2. 访问站点

  如图,是可以正常加载背景图的,F12中可以看到js加载状态也为200正常

3. 拷贝链接访问

  将图片和js地址拷贝到浏览器中访问,可以看到也是可以正常访问的。
  某些要求严格的项目,会认为这样是不安全的,需要加以限制,让资源只能在本站点中可以看到。如此,就引出下文的nginx防盗链了。


二、配置Nginx的防盗链

1. 修改nginx配置

  由于本示例项目中的静态资源都在static目录下,所以先拷贝原有的nignx代理块,将拦截路径改为“/test/static”,即拦截掉所有静态资源。然后再配置valid_referers,设置允许访问此资源的地址,多个地址之间用空格分隔(本示例中为10.0.11.89remotebank.utry.cn)。最后再增加一个判断,不在此地址范围内的请求予以拦截并返回403。
  新增的关键代码为:

# 设置可以访问静态资源的地址
valid_referers 10.0.11.89 remotebank.utry.cn;
# 如果不是白名单则 显示403 禁止访问
if ($invalid_referer) {return 403;
}

  修改后的结果如下图:

2. 修改后,访问站点

  在站点内访问,如下图所示,还是可以正常加载背景图和js文件的。说明业务是可以正常使用的。

3. 修改后,拷贝链接访问

  将图片和js地址拷贝出来到浏览器中访问,显示403。
  此时已经实现了不让外部访问本站点的静态资源了

三、说明

1. http请求头的referer

  简单来说,Referer是HTTP协议中的一个请求报头,用于告知服务器用户的来源页面。比如说你从Google搜索结果中点击进入了某个页面,那么该次HTTP请求中的Referer就是Google搜索结果页面的地址。如果你的博客中引用了其他地方的一张图片,那么对该图片的HTTP请求中的Referer就是你那篇博客的地址。

  本文中的方案,其实是用nginx获取http请求头中的referer,判断其是否在白名单内。如果不在,则不予放行,返回403。
  在站点内加载资源的时候,请求头中是会带上本站点的地址的。而拷贝链接到浏览器中执行时,请求头中不会有refer,也就会被拦截掉了。
  需要注意的是,请求头中的referer是很容易在代码中伪造的,因此这种方案是有一定局限性的。

2. nginx的valid_referers

  nginx的valid_referers语法格式为:valid_referers [none|blocked|server_names] ...

该指令的参数可以为下面的内容:

  • node:表示无Referer值的情况
  • blocked:表示Referer值被防火墙进行伪装
  • server_names:表示一个或多个主机名称

  该指令会根据http请求头中的Referer值进行判断,若符合valid_referers设定的规则,则给变量$invalid_referer赋值为0,否则赋值为1。


总结

  本文介绍了通过配置nginx的valid_referers,使用http请求头中的Referer值来判断静态资源是否可以被访问的方法。需要注意的是,referer是可以伪造的,因此本方案是有一定局限性的。

配置Nginx的防盗链,实现网站资源防盗相关推荐

  1. 源码包安装Nginx(1.19.1),并配置Nginx,比如:用户认证,防盗链,虚拟主机,SSL等功能

    基础配置 #关闭防火墙 [root@node2 ~]# systemctl stop firewalld [root@node2 ~]# systemctl disable firewalld #清空 ...

  2. django21:admin后台管理\media配置\图片防盗链\暴露后端资源\路由分发\时间分类

    admin后台管理 创建超级用户 createsuperuser 1.到应用下的admin.py注册模型表 from django.contrib import admin from blog imp ...

  3. 宝塔php防盗链,宝塔面板开启防盗链的方法详细教程

    为了节省建站成本,大多数站长都会选择一些小服务器,在另加CDN.云存储之类的来减轻服务器的压力,但是这类功能大多收费. 如果自己网站的图片都让别人复制图片链接地址,那么自己CDN流量就跑得贼快,花了钱 ...

  4. 运维有趣项目:搭建个人博客安全版(Appache2.4防盗链与防泄漏,防盗链httpd.conf无Load,include版)

    这次算是呕心沥血了,网上的防盗链文章简直一个模子的,全部都是采用httpd.conf修改LoadModule rewrite_module modules/mod_rewrite.so或是httpd- ...

  5. PHP防盗链的基本思想 防盗链的设置方法

    盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...

  6. php 实现防盗链,PHP如何实现防盗链详解

    本文主要和大家介绍PHP实现防盗链的方法,结合实例形式分析了php防盗链所涉及的相关技术与具体实现技巧,需要的朋友可以参考下,希望能帮助到大家. $_SERVER['HTTP_REFERER']的获取 ...

  7. Nginx+keepalived 实现高可用,防盗链及动静分离配置

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  8. Nginx+keepalived 实现高可用,防盗链及动静分离配置详解(值得收藏)

    作者:小不点啊 www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某 ...

  9. Nginx配置防盗链

    Nginx配置防盗链 进入Nginx配置文件: [root@LHQ vhosts]# vim test.conf server { listen 80; server_name www.test.co ...

最新文章

  1. oozie调度中的重试和手工rerun一个workflow
  2. java应用:csv文件的读写
  3. fifo java_java linux fifo文件通信
  4. 2021-03-07 Nussbaum函数
  5. 一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户...
  6. 简单的python案例_实现的简单python例子
  7. .net语言中使用MapWinGIS.ocx
  8. Cocos Creator 你不知道的细节
  9. JDK动态代理入门、JDK动态代理原理、为什么JDK动态代理是基于接口的
  10. MPU6050六轴传感器的原理及编程说明
  11. VARCHART XGantt 甘特图中的数据表介绍
  12. python-网络编程-tcp/ip认识(一)
  13. Mac新手必看教程,苹果电脑基本使用操作,苹果电脑基本操作
  14. python3是什么意思啊_python3指的是什么意思
  15. 数据结构与算法-初识树和图
  16. 中国MEMS和石英晶体振荡器市场现状研究分析与发展前景预测报告(2022)
  17. 学习笔记:C语言程序设计
  18. doraemon的python 函数与装饰器(哎呀,忘记传了)
  19. Informatic PowerCenter 学习记录
  20. Product-based Neural Networks

热门文章

  1. 可怕的无声环境计算机怎么做,求高手解决电脑为什么无声
  2. C# 实现拼手气红包算法整理
  3. 经纬财富:中山套单无需烦恼,解套有待学习
  4. Python 实现 Filebrowser
  5. 电脑显示未激活Windows的解决办法
  6. fzyzojP3618 -- [校内训练-互测20180412]士兵的游戏
  7. 数字游民让你实现边旅游边工作
  8. win32api模拟鼠标点击动作
  9. tasker_如何通过Tasker Automation将Android设备用作行车记录仪
  10. oracle olap创建物化视图,CUUG oracle物化视图讲解