美文网首页nginx
Nginx配置referer校验,实现简单的防盗链详解

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

作者: 心如苍井_空如水 | 来源:发表于2022-05-25 16:11 被阅读0次

    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图片。

    转载至:https://www.itxm.cn/post/29688.html

    相关文章

      网友评论

        本文标题:Nginx配置referer校验,实现简单的防盗链详解

        本文链接:https://www.haomeiwen.com/subject/yzneprtx.html