Valid_referers 设置信任网站
None 浏览器中referer(Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面连接过来的,服务器基此可以获得一些信息用于处理)为空的情况,就直接在浏览器访问图片
Blocked referrer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或者https:// 开头。
《1》:vim /usr/local/nginx/conf/nginx.conf 编辑文件
《2》:写入(注:写入的内容要放在缓存的上面。)
location ~* \.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
valid_referers none blocked *.source.com source.com;
if ($invalid_referer) {
rewrite ^/ http://www.source.com/error.html;
}
} <!-- more --> 释:
第一行:wma | wmv | asf | mp3 | mmf | zip | rar | jpg | gif | png | swf | flv 表示对这些后缀的文件实行防盗链 |
第二行:none blocked *.source.com source.com; 不区分大小写
表示referers信息中匹配none blocked .source.com source.com(代表任何,任何的二级域名)
If{ }里面内容的意思是,如果连接不是来自第二行指定的就强制跳转到403错误页面,当然直接返>回404也是可以的,也可以是图片。
https://blog.csdn.net/m0_54434140/article/details/122489818
1、Nginx Referer模块
nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求。当一个请求头的Referer字段中包含一些非正确的字段,这个模块可以禁止这个请求访问站点。构造Referer的请求很容易实现,所以使用这个模块并不能100%的阻止这些请求。
2、valid_referers 指令
语法: valid_referers none | blocked | server_names | string … ; |
配置段: server, location
指定合法的来源’referer’, 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1. 需要注意的是:这里并不区分大小写的.
参数说明:
none:请求头缺少Referer字段,即空Referer
blocked:请求头Referer字段不为空(即存在Referer),但是值被代理或者防火墙删除了,这些值不以“http://”或“https://”开头,通俗点说就是允许“http://”或”https//”以外的请求。
server_names:Referer请求头白名单。
arbitrary string:任意字符串,定义服务器名称或可选的URI前缀,主机名可以使用*号开头或结尾,Referer字段中的服务器端口将被忽略掉。
regular expression:正则表达式,以“~”开头,在“http://”或”https://”之后的文本匹配。
例子:
server {
listen 80 ;
server_name img.abc.com;
# 必须使用域名访问
if ($host != 'img.abc.com') {
return 403 ;
}
# 拦截非法referer ,none 和 blocked 的区别看以上说明
valid_referers blocked www.abc.com img.abc.com ;
if ($invalid_referer) {
return 403 ;
#rewrite ^.*$ http://www.baidu.com/403.jpg;
}
charset utf-8;
location / {
…………
} } 上面配置合法的Referer为 www.abc.com / img.abc.com 和 无Referer(浏览器直接访问,就没有Referer) ; 其他非法Referer请求过来时, $invalid_referer 值为1 , 就return 403 , 或者重定向到一个403图片。
http://events.jianshu.io/p/1f3ccaf93e7c