更多优质内容
请关注公众号

Nginx HTTP模块篇 Nginx防盗链——referer模块 (十八)-张柏沛IT博客

正文内容

Nginx HTTP模块篇 Nginx防盗链——referer模块 (十八)

栏目:其他内容 系列:Nginx入门系列 发布时间:2020-02-17 22:12 浏览量:3091


使用referer模块防盗链

该模块默认安装了

防盗链是通过结合 valid_referers指令和 $invalid_referer变量完成的。

valid_referers none|block|server_names|自定义url|正则 ...
上下文: serve/location

none 表示请求头中没有referer也可以通过
block 请求头有referer 但referer内容为空可以通过
server_names  请求头中referer的值与server_name中的某个域名匹配则允许访问。

自定义url  可以指定自定义域名或者url字符串,可使用*通配符匹配头部或者尾部

正则  如果使用正则,要在开始加上~


PS:如果refer中含有文件路径,如 referer:http://abc.com/nn,而规则中 abc.com可以通过,则http://abc.com/nn也可以通过。但是如果域名错了 referer:http://abc.comnn 则不通过

invalid_referer变量
如果通过了valid_referers指令的判定,则返回1,否则为空。

实际情况下,如果在html文件中引用了别的域名的图片或者css/js,那么用F12查看network中对该图片或者css/js的请求头是有referer这个项的,当然请求自己域名的静态资源都会有referer这个请求头,这都是服务端加上的。
如果请求的是页面就不会有referer这个请求头。

例子:

server {
    listen 8080;
    server_name referer.zbpblog.com;
    
    location / {
        valid_referers none block server_names *.zbpblog.com ~google ~baidu.com/\w+;
        
        if (!$invalid_referer){
            return 403;
        }
        
        return 200 "OK";
    }
}

curl http://referer.zbpblog.com:8080/       # OK

curl -H "referer:" http://referer.zbpblog.com:8080/     # OK

curl -H "referer:https://referer.zbpblog.com" http://referer.zbpblog.com:8080/      # OK
curl -H "referer:https://referer.zbpblog.com/abc" http://referer.zbpblog.com:8080/      # OK

curl -H "referer:https://abc.zbpblog.com" http://referer.zbpblog.com:8080/      # OK
curl -H "referer:https://zbpblog.com" http://referer.zbpblog.com:8080/      # 403 不匹配 *.zbpblog.com 少了一个.   写成 *zbpblog.com 会报语法错误。如果想匹配 zbpblog.com只能使用 "zbpblog.com"

curl -H "referer:https://www.zbpblog.com/nn" http://referer.zbpblog.com:8080/   # OK
curl -H "referer:https://www.zbpblog.comnn" http://referer.zbpblog.com:8080/   # 403

curl -H "referer:https://www.google.com/abc" http://referer.zbpblog.com:8080/   # OK 使用正则~google,则Referer中只要有google字样就能通过

curl -H "referer:https://www.baidu.com/abc" http://referer.zbpblog.com:8080/    # OK
curl -H "referer:https://www.baidu.com" http://referer.zbpblog.com:8080/        # 403





更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Nginx HTTP模块篇 Nginx防盗链——referer模块 (十八)

热门推荐
推荐新闻