温馨提示×

linux nginx如何防盗链

小樊
45
2026-10-07 21:24:19
栏目: 智能运维

在 Linux 下使用 Nginx 防盗链(Referer 防盗链) 是非常常见的做法,主要用于防止别人盗用你的图片、视频、文件等资源。

下面按最常见用法 → 进阶用法给你说明。


一、最基础的 Referer 防盗链(推荐)

场景

只允许:

  • 自己的域名(如 www.example.com)
  • 用户直接访问(无 Referer)

拒绝:

  • 其他网站盗链

配置示例

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

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

说明

  • none:允许无 Referer(直接访问)
  • blocked:允许 Referer 被防火墙隐藏的情况
  • www.example.com:允许的来源
  • 其他来源 → 返回 403

二、防盗链并返回占位图(更友好)

location /images/ {
    valid_referers none blocked www.example.com;
    if ($invalid_referer) {
        rewrite ^ /static/forbidden.png break;
    }
}

三、对多种资源统一防盗链

location ~* \.(jpg|jpeg|png|gif|webp|mp4|zip)$ {
    valid_referers none blocked www.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

四、允许多个域名防盗链

valid_referers none blocked
    www.example.com
    img.example.com
    cdn.example.com;

五、使用正则(高级)

valid_referers ~\.example\.com$;

⚠️ 注意:正则必须写在最后,且以 ~ 开头


六、配合 Nginx 变量(白名单 IP 不受影响)

if ($remote_addr = "1.2.3.4") {
    break;
}

七、CDN / 反向代理注意事项

如果你是:

  • CDN 回源
  • 对象存储(OSS / S3)

要注意:

  • CDN 可能会改写 Referer
  • 建议同时做:
    • Referer 防盗链
    • Token / 签名 URL
    • 或 CDN 层防盗链

八、修改后重载 Nginx

nginx -t
systemctl reload nginx

九、常见坑

❌ 浏览器为空 Referer 被拦截
✅ 加上 none

❌ 微信 / APP 内访问失败
✅ 加 blocked

❌ HTTPS 页面引用 HTTP 资源
✅ 统一协议


十、更安全的防盗链方式(进阶)

如果资源非常重要,建议:

  • Token 签名 URL
  • Cookie 校验
  • Nginx + Lua(OpenResty)
  • CDN 防盗链

如果你愿意,可以告诉我:

  • 你的 Nginx 版本
  • 防盗链对象(图片 / 视频 / 下载文件)
  • 是否使用 CDN

我可以给你精准可用的配置。

0 踩