导读:本期聚焦于广州SEO公司创作的《Nginx防盗链配置怎么写才能有效防止图片和视频资源被盗用》,敬请观看详情。把静态资源直接挂在公网,常会遇到其他站点偷偷引用你的图片或视频,导致带宽被白白消耗。Nginx的防盗链核心是利用valid_referers指令做来源页校验,再配合return或rewrite拒绝非法请求。除了基础的referer判断,还可叠加签名URL、限速以及跨域头限制来提升防护强度。本文梳理了单域名、多规则及通配符的配置写法,也说明了浏览器空referer场景的处理方式,帮助运维人员用最低成本堵住资源盗用漏洞。

网站上线后,不少人发现自己的图片、压缩包或视频文件被别的站点直接通过URL引用,不仅没带来流量,反而占用了服务器带宽。Nginx作为最常用的反向代理和静态资源服务器,自带了轻量的防盗链能力,合理配置就能拦截大部分盗用请求。防盗链的本质是判断请求从哪里来,如果不是允许的页面,就拒绝返回真实文件。

Nginx防盗链配置怎么写才能有效防止图片和视频资源被盗用

基于referer的基础防盗链配置

Nginx通过ngx_http_referer_module模块提供防盗链功能,核心指令是valid_referers。该指令用来定义合法的来源地址,后续用内置变量$invalid_referer判断请求是否合法。当来源不在允许列表时,这个变量会被设为空字符串以外的真值,我们可以在location中根据它返回403或者重定向到提示图。

下面是一段最典型的图片防盗链配置,只允许本站和百度搜索引擎抓取,其他外站引用直接返回403。注意none表示允许无referer的请求,比如用户直接在浏览器打开图片地址;blocked表示允许referer头存在但被防火墙删除了协议的请求。如果确定图片只会被网页嵌入,可以去掉none以更严格。

server {
    listen 80;
    server_name www.ippipp.com;

    location ~* .(jpg|jpeg|png|gif|webp)$ {
        valid_referers none blocked www.ippipp.com *.ippipp.com;
        if ($invalid_referer) {
            return 403;
        }
        root /data/www;
    }
}

这种写法的优点是简单、不依赖后端程序,所有判断在Nginx层完成,性能损耗极低。缺点在于referer本身由浏览器发送,可以被伪造,所以对安全要求极高的场景不能只靠它。另外,如果站点启用了CDN,需把CDN的回源域名或节点IP对应的域名也加入白名单,否则正常用户会看到403。

通配符、正则与多规则组合写法

实际业务中往往要同时保护多种资源,并且允许子域名或第三方合作站引用。valid_referers支持字符串、通配符和正则三种形式。字符串精确匹配域名;*通配符可放在开头或结尾;以~开头的部分会被当作正则表达式处理,方便批量放行特定后缀的域名。

下面示例展示了视频和压缩包文件的防盗链,并且用正则放行了所有以cdn-开头的企业内网域名,同时拒绝外站。正则写法要注意转义点号,避免匹配到任意字符。如果合作方较多,建议把白名单抽成单独文件用include引入,方便运维修改而不动主配置。

location ~* .(mp4|zip|rar)$ {
    valid_referers
        none blocked
        www.ippipp.com
        *.ippipp.com
        ~^https?://cdn-[a-z0-9]+.ippipp.com/;
    if ($invalid_referer) {
        return 403;
    }
    root /data/files;
}

除了返回403,也可以把盗链请求重写到一张水印图或提示页,既保留可用性又起到警示作用。例如用rewrite跳转到/static/steal.png。不过重写会增加一次内部跳转,高并发下不如直接return高效。多规则组合时,要把最宽松的条件放后面,Nginx按顺序匹配,命中即停止。

增强防护:签名URL与限速策略

referer校验容易被绕过,更可靠的做法是给资源链接加上时效性签名。可以使用ngx_http_secure_link_module模块,在后端生成带md5和过期时间的URL,Nginx验证签名合法且未过期才放行。这样即使别人拿到地址,过一段时间也会失效,从根本上防止长期盗用。

以下配置启用了secure link,请求必须携带?md5=xxx&expires=yyy参数。后端可用PHP或Python按相同算法生成,密钥保存在服务器不公开。配合limit_rate还能给未带签名的预览流量限速,进一步降低被盗链时的损失。

location /download/ {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "secret$uri$arg_expires";
    if ($secure_link = "") { return 403; }
    if ($secure_link = "0") { return 410; }
    limit_rate 100k;
    root /data/secure;
}

在防盗链体系中,建议将referer校验作为第一道低成本防线,签名URL作为核心资源的最终防线。同时可在响应头中设置Content-Disposition和跨域限制,避免文件被嵌入到别的网页中播放或下载。定期分析访问日志中referer字段的异常域名,能及时发现新的盗链站点并加入黑名单,形成动态防护闭环。

Nginx防盗链referer校验修改时间:2026-08-17 10:38:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。