官方地址:http://nginx.org/en/docs/http/ngx_http_referer_module.html
作用:
- 防止资源被盗用。 防止非正常用户访问,
- 占用网站资源,影响网站性能,造成影响正常用户访问
一、防盗链语法
句法: valid_referers none | blocked | server_names | string ...;
默认: -
内容: server, location
指定“ Referer” 请求标头字段值
,这些值将导致将嵌入式$invalid_referer变量设置为空字符串。否则,变量将设置为“ 1”。搜索匹配项不区分大小写,具体可以分析日志查看$http_referer
返回的信息(访问源请求域名)
注
解
- none:表示请求标头中缺少“Referer”字段;
- blocked:表示“Referer”字段出现在请求标头中,但其值已被防火墙或代理服务器删除; 这些值是不以“http://”或“https://”开头的字符串;
- server_names: 表示“Referer”请求头字段包含一个服务器名称;
- string:表示定义服务器名称和可选的URI前缀。 服务器名称的开头或结尾可以包含“*”。 在检查期间,“Referer”字段中的服务器端口被忽略;
二、来源哈希表的存储桶大小
句法: referer_hash_bucket_size size;
默认: Referer_hash_bucket_size 64;
内容: server, location
该指令出现在1.0.5版中。
设置有效引荐来源哈希表的存储桶大小
三、来源哈希表的最大值
句法: referer_hash_max_size size;
默认: referer_hash_max_size 2048;
内容: server, location
该指令出现在1.0.5版中。
设置size有效引荐来源哈希表的最大值
特别提示:域名配置过多报错信息提示修改如下两个参数配置(server_names_hash_bucket_size、server_names_hash_max_size
):文档查看 http://nginx.org/en/docs/hash.html
四、嵌入式变量
$invalid_referer
空字符串,如果“ Referer”请求标头字段值被视为有效,则为 “ 1”。
五、测试
1、实验机器两台
IP | 机器名称 | 机器角色 |
---|---|---|
192.168.11.186 | 虚拟机 | 窃取资源 |
101.200.157.73 | 公有云 | 提供资源 |
窃取图片url地址:http://101.200.157.73/img/login.47ae5af0.png
2、虚拟机访问资源index.html文件
vim index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
/**********总体布局**************/
*{margin:0; padding:0; border:0;}
body{background-color:rgba(0,0,0,0.4);}
#content{
position:relative;
width:970px;
height:550px;
margin:20px auto;
border:2px solid #FFF;
}
#content:hover #tags img{
opacity:1;
}
/**********图片主要显示区**************/
#player{position:absolute; width:100%; height:100%; top:0; left:0;}
#player img{display:inline-block; position:absolute; float:left; width:970px; height:550px; top:0;}
/**********图片显示标签**************/
#tags{position:absolute; left:30px; bottom:20px;}
#tags img{display:inline-block; width:100px; height:61.8px; float:left; margin-right:10px; transition:1s; opacity:0.5;}
#tags img:hover{transform:scale(1.1); cursor:pointer;}
</style>
<script type="text/javascript" src="http://www.imooc.com/data/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(function(){
var same=0; //用于避免触碰到相同标签式是发生切换
var interval=5000; //图片切换时间
var timer; //计时器
/*********显示和隐藏图片************/
$("#player img").hide();
$("#player img").eq(0).show();
$("#tags img").mouseover(function(){
var tags=$("#tags img").index(this);
if(same!=tags){
$("#player img").fadeOut();
$("#player img").eq(tags).fadeIn(500);
}
same=tags;
})
/*********自动播放图片***********/
function autoplay(){
same++;
if(same>=$("#tags img").length){
same=0;
}
$("#player img").fadeOut();
$("#player img").eq(same).fadeIn(1);
}
/**********播放图片切换**************/
function play(){
timer=setInterval(autoplay,interval);
}
/**********停止图片切换**************/
function stop(){
clearInterval(timer);
}
/*****鼠标悬浮或移出时播放或停止切换图片***/
$("#content").hover(function(){
stop();
},
function(){
play();
})
play();
})
</script>
</head>
<body>
<div id="content">
<!--主显示区-->
<div id="player">
<img src="http://101.200.157.73/img/login.47ae5af0.png">
<img src="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1928423532,2042850473&fm=26&gp=0.jpg">
</div>
<!--显示标签-->
<div id="tags">
<img src="http://101.200.157.73/img/login.47ae5af0.png">
<img src="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1928423532,2042850473&fm=26&gp=0.jpg">
</div>
</div>
</head>
<body>
</body>
</html>
3、虚拟机访问
4、公用云机器配置nginx文件
valid_referers none blocked 101.200.157.73 *.biadu.com ~\.google\. ; # 101.200.157.73(server_name),可接多个域名
if ($invalid_referer) { #内置变量,Referer”请求标头字段值
return 403; #如果blocked未包含的域名请求访问返回403状态码
}
5、重启公有云机器nginx服务
nginx -t && nginx -s reload
6、再次刷新查看虚拟机页面
7、查看公有云是否可以正常访问到