Nginx 使用异常阻止热链接

Nginx 使用异常阻止热链接

我正在尝试实施下载热链接保护。

我有这个代码

    location /download/ {
      valid_referers  blocked  server_names  *.example.com;

      if ($invalid_referer) {
        return   403;
      }

工作正常,这允许指定域并阻止任何不在 valid_referers 中的内容,问题是什么?我想实现一个允许使用非 referer 的指定 IP,其余的则阻止它。

这是日志显示的内容。

1.2.3.4 - - - “GET 文件.doc HTTP/2.0” 200 13050 “-” “-”

我只想要 1.2.3.4 不接受任何引荐来源。

答案1

为了防止热链接,允许空的引荐来源字符串(直接下载)就足够了。因此,您的配置可能如下所示:

valid_referers none blocked server_names *.example.com;

浏览器在加载网页中嵌入的图像时,总会在图像请求中添加 Referer 标头。

如果你确实想阻止直接下载图像,则需要在httpnginx 配置级别使用类似这样的操作:

geo $blocked {
    default 1;
    1.2.3.4 0;
}

然后在server块中:

location /download/ {
    valid_referers  blocked  server_names  *.example.com;

    set $refblocked $invalid_referer$blocked;

    if ($refblocked = "11") { # If value of both $invalid_referer and $blocked are 1, block access.
        return 403;
    }
}

这里,geo模块用于将IP地址映射到变量值,并set用于将$invalid_referer和组合$blocked成单个变量,在if语句内进行测试。

我自己还没有测试过这个确切的配置,但是原理应该是可行的。

答案2

这也应该有效:

geo $hotlink {
    default $invalid_referer;
    1.2.3.4 0;
}
location /download/ {
    valid_referers  blocked  server_names  *.example.com;
    if ($hotlink) {
       return 403;
    }
}

相关内容