You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Nginx配置阻止其他网页下载本站服务器上的媒体资源

结论

  • 可以通过修改Nginx配置禁止外部站点盗链本站媒体资源,最常用的方案是基于Referer请求头的校验规则
  • 也可以通过CORS设置实现该需求,两种方案都可以独立配置,也可以叠加使用提升防护效果

方案1:基于Referer校验的Nginx防盗链配置

这是行业内处理图片盗链最通用的方案,配置成本低,对正常用户访问无影响:
找到你的Nginx站点配置文件(一般存放在/etc/nginx/conf.d/目录下对应站点的.conf文件,或者/etc/nginx/nginx.conf里的server块),在server块中添加如下规则:

# 匹配需要防盗链的资源后缀,可根据需求增删
location ~* \.(gif|jpg|jpeg|png|webp|bmp|mp4|mp3|flv|avi|swf)$ {
    # 允许的合法域名,localhost是本地调试用,替换为你自己的站点域名即可,多个域名用空格分隔
    valid_referers none blocked server_names *.你的域名.com 你的域名.com;
    # 非法Referer的情况默认返回403,也可以配置返回一张提示盗链的占位图
    if ($invalid_referer) {
        return 403;
        # 如需返回占位图,用下面两行代替上一行的return 403即可
        # rewrite ^/ https://你的域名.com/anti-steal.jpg;
        # break;
    }
}

参数说明:

  • none:允许没有Referer头的请求访问(比如用户直接在地址栏输入图片地址打开的场景)
  • blocked:允许Referer头被防火墙/代理修改过、不为空但没有有效值的请求
  • server_names:自动匹配当前server块中配置的所有站点域名,不用手动逐个添加

配置完成后执行nginx -t校验配置是否正确,无误后执行nginx -s reload重载配置即可生效。


方案2:基于CORS规则实现防盗链

CORS是专门用于跨域资源访问控制的机制,也可以实现媒体资源的跨域拦截,注意CORS规则仅对浏览器发起的跨域请求生效,爬虫或者非浏览器场景的请求不会遵守CORS规则,所以防护范围比Referer方案窄,适合作为补充防护。
配置示例如下,同样添加在server块或者对应资源的location块中:

location ~* \.(gif|jpg|jpeg|png|webp|bmp|mp4|mp3|flv|avi|swf)$ {
    # 允许跨域的域名,替换为你自己的站点域名即可,多个域名可以通过if判断或者map映射配置
    if ($http_origin ~* ^https?://(.*\.)?你的域名\.com$) {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    }
    # 非允许域名的跨域请求,浏览器会自动拦截加载
    add_header Access-Control-Allow-Origin '' always;
}

额外说明

  • 两种方案可以同时配置,叠加后防护效果更好
  • Referer头可以被伪造,如果遇到针对性伪造Referer的盗链,可以配合Cookie校验、签名校验等方案提升防护等级
  • 如果你的站点本身需要开放部分图片给其他合作站点引用,直接把合作站点的域名加在valid_referers的允许列表里即可

内容的提问来源于stack exchange,提问作者andrey_Kox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:36:01