图片防盗链是为了解决防止图片被其它网站滥用的方法。

在nginx的配置中,可以使用 valid_referers 指令完成图片防盗链的配置。

语法:

valid_referers [none|blocked|server_names] …

在此之前首先说明什么是来路,来路是指访问我们网站的页面的时候得告诉我们您是从哪里来的,是从百度来的呢?还是直接在浏览器中输入地址的呢?这就是来路。

参数它表示有效的来路,其默认值为none,以下解释各个参数的用法:

  • none:表示没有referer,一般表示直接在浏览器中输入地址打开图片的。配置了它表示可以直接在浏览器中打开图片而不被阻止。
  • blocked:表示有referer但是被防火墙或者是代理给去除了,这些值是不以“http://” 或 “https://” 开头的字符串;
  • server_names: 服务器名称,域名列表,也就是白名单。

配置完成valid_referers指令后,会将结果传递给一个 $invalid_referer变量,如果它和上面的其中任意一个条件都匹配则$invalid_referer值为0,否则将被阻止访问。

例子:

location ~ .*\.(gif|jpg|jpeg|png|bmp)$ {
    valid_referers none blocked *.yxjc123.com;
    if ($invalid_referer) {
        return 403;
    }
}
当我们在其它的网站引用我们的图片地址的时候。
<img src="https://www.yxjc123.com/uploads/image/202304/20230410155638_54294.png">
效果如下:

nginx 配置图片防盗链

破解nginx防盗链配置

一般的服务器防盗链都会配置来源为空的情况下是可以打开图片的,即直接在浏览器中输入地址是可以访问的,所以这也是一个bug。

所以我们只需要把图片的属性配置为没有来路即可。

<img referrerPolicy="no-referrer" src="xxx.jpg"/>