Nginx实现防盗链的多种方式

 更新时间:2025年01月16日 09:10:45   作者:薛伟同学  
防盗链指的是防止其他网站未经许可直接引用你的资源(如图片、音视频文件、文档等),这样做不仅能有效节约带宽,还能防止未经授权的内容被滥用,本文给大家介绍了Nginx实现防盗链的多种方式,需要的朋友可以参考下

什么是防盗链

防盗链指的是防止其他网站未经许可直接引用你的资源(如图片、音视频文件、文档等)。这样做不仅能有效节约带宽,还能防止未经授权的内容被滥用。最常见的防盗链技术就是通过检查请求的Referer头部,判断请求的来源是否合法。

Nginx 防盗链的基本原理

防盗链的原理通常是根据请求的 HTTP Referer 头 来判断请求是否来自授权域名。如果请求是从非授权的域名发起的,Nginx 可以拒绝该请求。具体的防盗链实现方式有多种,常见的是基于 Referer 和 IP 地址进行限制。

基于 Referer 头的防盗链

Referer 头是浏览器在发起 HTTP 请求时自动添加的字段,指示当前请求是从哪个页面跳转过来的。防盗链的基本做法是,只有从自己的网站或者授权的域名发送的请求才能正常访问资源,其他来源的请求会被拒绝。

基本配置

以下是一个基于 Referer 头的简单防盗链配置:

server {
    listen 80;
    server_name example.com;

    location ~* \.(jpg|jpeg|png|gif|bmp|webp|mp4)$ {
        valid_referers none blocked example.com *.example.com;
        if ($invalid_referer) {
            return 403;  # 非授权的 Referer,返回 403 错误
        }
    }
}

配置解释:

  • valid_referers:指定允许访问资源的 Referer 域名或 IP 地址。

    • none:表示没有 Referer 字段的请求(例如,直接通过书签访问)。

    • blocked:表示 Referer 字段为空或者包含非法字符的请求。

    • example.com:表示允许来自 example.com 的请求。

    • *.example.com:表示允许来自 example.com 子域名的请求。

  • if ($invalid_referer):如果请求的 Referer 不符合上面的规则,Nginx 会返回 403 错误,拒绝请求。

案例:保护图片资源

假设你的图片资源存放在 /var/www/example.com/images/ 目录下,你希望只有来自你自己网站(如 example.com)的请求能访问这些图片。其他域名(如盗链的第三方网站)访问时会返回 403 错误。

server {
    listen 80;
    server_name example.com;

    location /images/ {
        valid_referers none blocked example.com *.example.com;
        if ($invalid_referer) {
            return 403;  # 拒绝盗链
        }
        root /var/www/example.com;
    }
}

这样,只有访问 example.com/images/ 并且 Referer 是 example.com 或其子域名的请求才会成功,其他站点盗链时将被拒绝。

基于 IP 地址的防盗链

除了使用 Referer 头外,还可以通过限制 IP 地址来防止外部站点盗链。虽然这种方式不如基于 Referer 的方法直接,但在某些情况下,结合使用会更加安全。

基本配置

server {
    listen 80;
    server_name example.com;

    location /images/ {
        allow 192.168.1.0/24;  # 允许特定 IP 范围访问
        deny all;               # 拒绝其他 IP 访问
        root /var/www/example.com;
    }
}

配置解释:

  • allow:允许特定 IP 或 IP 范围访问资源。
  • deny:拒绝其他 IP 的访问。

这种配置可以用于限制只允许公司内部的 IP 地址访问特定的资源。

防盗链的增强措施

为了进一步增强防盗链的效果,可以结合以下措施:

限制 HTTP 方法

通过限制不必要的 HTTP 方法,减少外部滥用的风险。

server {
    listen 80;
    server_name example.com;

    location /images/ {
        valid_referers none blocked example.com *.example.com;
        if ($invalid_referer) {
            return 403;
        }
        limit_except GET POST {
            deny all;  # 只允许 GET 和 POST 方法
        }
    }
}

使用 Token 验证

你可以通过在请求 URL 中使用加密的 Token 来验证请求是否合法。只有合法的请求才能通过 Nginx 访问资源。这种方法通常用于视频、音频等媒体资源的防盗链。

设置缓存时间

对不常更改的资源(如图片、视频等)设置合理的缓存时间,减少盗链带来的带宽消耗。

location ~* \.(jpg|jpeg|png|gif|bmp)$ {
    expires 30d;  # 缓存 30 天
}

实际场景

防止图片被盗链

一个常见的实际场景是防止其他网站盗用你网站的图片。如果你的图片资源很大,被其他站点盗用会导致带宽浪费,同时也可能影响你网站的加载速度和 SEO 排名。你可以通过 Nginx 配置 Referer 防盗链,只允许自己的站点加载图片。

保护下载文件

对于一些需要付费或特定用户才可以下载的文件(如电子书、软件包等),你可以通过防盗链策略来确保只有购买或注册的用户能访问这些资源。

server {
    listen 80;
    server_name example.com;

    location /downloads/ {
        valid_referers none blocked example.com;
        if ($invalid_referer) {
            return 403;
        }
        root /var/www/example.com;
    }
}

视频盗链防护

在视频流媒体的场景下,防盗链尤为重要,尤其是在视频网站或教育平台中,防止其他网站通过直接 URL 请求来盗用视频资源。可以结合 Referer 防盗链和 IP 限制来进行防护。

到此这篇关于Nginx实现防盗链的多种方式的文章就介绍到这了,更多相关Nginx实现防盗链内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 图文详解nginx日志切割的实现

    图文详解nginx日志切割的实现

    这篇文章主要给大家介绍了关于nginx日志切割实现的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Nginx中禁止使用IP访问网站的配置实例

    Nginx中禁止使用IP访问网站的配置实例

    这篇文章主要介绍了Nginx中禁止使用IP访问网站的配置实例,一般在备案时可能需要这种设置,需要的朋友可以参考下
    2014-07-07
  • 简单指南:在Linux上安装Nginx

    简单指南:在Linux上安装Nginx

    本文将介绍如何在Linux系统下安装Nginx,Nginx是一款高性能的Web服务器和反向代理服务器,被广泛用于构建高可靠性、高性能的网站和应用程序,通过本文的指导,您将学会如何在Linux系统上安装Nginx,并进行基本的配置,需要的朋友可以参考下
    2023-10-10
  • Nginx中的最大连接数与连接池用法解读

    Nginx中的最大连接数与连接池用法解读

    Nginx的连接数和连接池配置对于提升服务器性能和稳定性至关重要,通过配置这些参数,可以优化Nginx处理并发请求的能力,减少资源的浪费,并提高响应速度
    2025-12-12
  • keepalived+lvs 对nginx做负载均衡和高可用的操作方法

    keepalived+lvs 对nginx做负载均衡和高可用的操作方法

    这篇文章主要介绍了keepalived+lvs 对nginx做负载均衡和高可用的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • nginx流量拷贝的实现示例

    nginx流量拷贝的实现示例

    Nginx的ngx_http_mirror_module模块提供流量复制功能,可将生产环境流量实时复制到测试环境,用于功能验证、性能测试和问题排查,下面就来详细的介绍一下nginx流量拷贝的使用,感兴趣的可以了解一下
    2026-01-01
  • 利用nginx同一端口部署多个前端的办法(亲测有效版)

    利用nginx同一端口部署多个前端的办法(亲测有效版)

    在Nginx中配置同一个端口支持多个前端应用,通常可以通过不同的路径(location)来映射不同的前端项目,这篇文章主要介绍了利用nginx同一端口部署多个前端的相关资料,需要的朋友可以参考下
    2026-01-01
  • nginx的location配置导致网关返回404问题

    nginx的location配置导致网关返回404问题

    这篇文章主要介绍了nginx的location配置导致网关返回404问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • nginx基于域名,端口,不同IP的虚拟主机设置的实现

    nginx基于域名,端口,不同IP的虚拟主机设置的实现

    这篇文章主要介绍了nginx基于域名,端口,不同IP的虚拟主机设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 为Nginx自定义404,502错误页面的方法

    为Nginx自定义404,502错误页面的方法

    为Nginx自定义404,502错误页面的方法,需要的朋友可以参考下。
    2010-12-12

最新评论