Nginx配置referer校验,实现简单的防盗链

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://"之后的文本匹配。

3、示例

server {
listen 80 ;
server_name img.abc.com;
# 必须使用域名访问

if (host != 'img.abc.com') {             return 403 ;     }       # 拦截非法referer     valid_referers none 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图片。
————————————————
版权声明:本文为CSDN博主「打杂员工」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luyinxing1/article/details/109511851

posted @   GaoYanbing  阅读(1303)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示