配置Nginx的防盗链,实现网站资源防盗
前言
在项目中,经常会有不想让本站点的静态资源被他人盗取访问
的需求。比如网站中的图片,前端加载的一些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.89和remotebank.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的防盗链,实现网站资源防盗相关推荐
- 源码包安装Nginx(1.19.1),并配置Nginx,比如:用户认证,防盗链,虚拟主机,SSL等功能
基础配置 #关闭防火墙 [root@node2 ~]# systemctl stop firewalld [root@node2 ~]# systemctl disable firewalld #清空 ...
- django21:admin后台管理\media配置\图片防盗链\暴露后端资源\路由分发\时间分类
admin后台管理 创建超级用户 createsuperuser 1.到应用下的admin.py注册模型表 from django.contrib import admin from blog imp ...
- 宝塔php防盗链,宝塔面板开启防盗链的方法详细教程
为了节省建站成本,大多数站长都会选择一些小服务器,在另加CDN.云存储之类的来减轻服务器的压力,但是这类功能大多收费. 如果自己网站的图片都让别人复制图片链接地址,那么自己CDN流量就跑得贼快,花了钱 ...
- 运维有趣项目:搭建个人博客安全版(Appache2.4防盗链与防泄漏,防盗链httpd.conf无Load,include版)
这次算是呕心沥血了,网上的防盗链文章简直一个模子的,全部都是采用httpd.conf修改LoadModule rewrite_module modules/mod_rewrite.so或是httpd- ...
- PHP防盗链的基本思想 防盗链的设置方法
盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率.受益者不提供资源或提供 ...
- php 实现防盗链,PHP如何实现防盗链详解
本文主要和大家介绍PHP实现防盗链的方法,结合实例形式分析了php防盗链所涉及的相关技术与具体实现技巧,需要的朋友可以参考下,希望能帮助到大家. $_SERVER['HTTP_REFERER']的获取 ...
- Nginx+keepalived 实现高可用,防盗链及动静分离配置
一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...
- Nginx+keepalived 实现高可用,防盗链及动静分离配置详解(值得收藏)
作者:小不点啊 www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某 ...
- Nginx配置防盗链
Nginx配置防盗链 进入Nginx配置文件: [root@LHQ vhosts]# vim test.conf server { listen 80; server_name www.test.co ...
最新文章
- oozie调度中的重试和手工rerun一个workflow
- java应用:csv文件的读写
- fifo java_java linux fifo文件通信
- 2021-03-07 Nussbaum函数
- 一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户...
- 简单的python案例_实现的简单python例子
- .net语言中使用MapWinGIS.ocx
- Cocos Creator 你不知道的细节
- JDK动态代理入门、JDK动态代理原理、为什么JDK动态代理是基于接口的
- MPU6050六轴传感器的原理及编程说明
- VARCHART XGantt 甘特图中的数据表介绍
- python-网络编程-tcp/ip认识(一)
- Mac新手必看教程,苹果电脑基本使用操作,苹果电脑基本操作
- python3是什么意思啊_python3指的是什么意思
- 数据结构与算法-初识树和图
- 中国MEMS和石英晶体振荡器市场现状研究分析与发展前景预测报告(2022)
- 学习笔记:C语言程序设计
- doraemon的python 函数与装饰器(哎呀,忘记传了)
- Informatic PowerCenter 学习记录
- Product-based Neural Networks