侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Nginx(18)之防盗链

zze
zze
2020-03-14 / 0 评论 / 0 点赞 / 743 阅读 / 1382 字

了解防盗链之前先了解下 HTTP 请求头中 referer 这个属性,当浏览器向Web 服务器发出请求时,一般会带上这个属性用来表明网页的来源。

比如我在我的博客里面添加了朋友的友链,那么当有人点击友链这个超链接跳转到朋友的博客时,在朋友博客服务器上可以获取到该请求的 referer 的值就是我的博客的 URL。

防盗链的基本原理就是根据请求头中 referer 属性得到网页来源,从而实现访问控制。

为什么要实现防盗链?首先这些非法访问并不会给网站带来利益或好处,相反,这会浪费网站的带宽,增加服务器的连接压力,比如有些网站是按流量收费的,那么只要有人访问了盗用图片或其他文件的网站,网站就要支付这部分的流量费用。

在 Nginx 中实现防盗链可使用 valid_referers 指令实现,该指令由「ngx_http_referer_module」模块提供,其使用规则如下:


看下面示例:

location ~* \.(gif|jpg|png|bmp)$ {
    valid_referers none blocked https://www.zze.xyz/*;
    if ($invalid_referer){
        return 403;
        # rewrite ^/ https://www.zze.xyz;
    }
}

说明:

  • 1 行:location 匹配访问资源为 gif/jpg/png/bmp 的文件;
  • 2 行:valid_referers 用来定义白名单,none 代表请求头中没有referer 信息,这一般是直接在浏览器输入图片网址,blocked 代表被防火墙过滤标记过的请求;
  • 3 行:invalid_referer 是内置变量,通过判断上一行中的 valid_referers 值会返回 0 或者 1
  • 4 行:如果访问来源不在白名单内,则返回 403 错误;
  • 5 行:响应指定的图片或指定资源;

这种方式实现可以限制大多数普通的非法请求,但不能限制有目的的请求,因为这种方式可以通过伪造 referer 信息来绕过。

0

评论区