Nginx防盗链的使用

288 阅读3分钟

是什么?

配置防盗链后,你的 Nginx 服务器会检查 HTTP 请求的 Referer 头部。如果请求来源不在你的允许列表中,Nginx 会拒绝访问并返回错误(通常是 403 Forbidden)。这意味着只有来自你允许的域名或直接访问的请求能够加载和显示这些静态资源。

为什么使用?

1.  带宽盗用:当其他网站直接链接到你的静态资源(如图片、视频、CSS、JavaScript 文件等)并在他们的页面上使用时,他们实际上是在消耗你的服务器带宽。这可能会导致你的服务器流量过高,增加服务器成本。

2.  内容盗用:如果你的静态资源是版权受保护的或是专属内容,你可能不希望这些资源在你无法控制的第三方网站上显示。

3.  用户体验:第三方网站可能会以你无法预期的方式使用你的静态资源,这可能会对你的品牌和用户体验产生不利影响。

4.  安全和隐私:如果静态资源包含敏感信息,防止它们被未经授权的第三方使用是非常重要的。

5.  法律责任:如果未经许可的静态资源使用导致法律问题,配置防盗链可以作为你采取措施保护内容的证据。

怎么使用?

在提供的 Nginx 防盗链配置示例中,valid_referers 指令定义了允许访问图片资源的 referer 来源。具体来说,valid_referers 列表中包含以下几种类型:

none:表示允许直接访问资源,即请求中没有 Referer 头部的情况。这通常发生在用户直接在浏览器地址栏中输入 URL 或使用书签访问资源。

blocked:表示允许那些请求中 Referer 被阻止的情况。有些用户的浏览器配置或安全软件可能会阻止发送 Referer 信息。

server_names:表示允许当前服务器中定义的所有域名。这是一个特殊的参数,它与当前 Nginx 配置中的 server_name 指令相匹配,允许来自这些域名的请求。

~(.+.)?yourdomain.com:这是一个正则表达式,表示允许来自 yourdomain.com 以及其任何子域的请求。这里的 ~ 表示这是一个正则匹配,而 (.+.)? 允许任何子域(如 sub.yourdomain.com)、甚至是嵌套子域(如 sub.sub.yourdomain.com),并且 ? 表示子域部分是可选的,所以 yourdomain.com 也在允许范围内。

请注意,你需要将 yourdomain.com 替换为实际的域名来适应你的网站。如果你希望允许多个特定的域名,你可以按照需要添加更多的域名模式,例如:

server {

    listen       80;

    listen  [::]:80;

    server_name  localhost;

#access_log  /var/log/nginx/host.access.log  main;

    location / {

        root   /usr/share/nginx/html;

        index  index.html index.htm;

    }

    location ~* \.(jpg|jpeg|png|gif|bmp|webp|mp4)$ { # 指定图片资源的类型 和 map视频

        root /usr/share/nginx/html;

        valid_referers none server_names;

        if ($invalid_referer) {

        return 403; # 如果不是有效的 referer,则返回 403 禁止访问

    }


}

image.png

怎么引流到本站?在403 直接返回警示图片,或者直接302 重定向

location ~* \.(jpg|jpeg|png|gif|bmp|webp|mp4)$ { # 指定图片资源的类型 和 map4视频

        root /usr/share/nginx/html;

        valid_referers none server_names;

        if ($invalid_referer) {

            # return 403; # 如果不是有效的 referer,则返回 403 禁止访问

            rewrite ^ /daolian.jpg break;

        }

        # ... 其他配置,比如 root, proxy_pass 等 ...

    }

在非本站访问 本站资源

image.png