插件窝 干货文章 如何配置Nginx的防盗链

如何配置Nginx的防盗链

referer 防盗 配置 Nginx 100    来源:    2025-04-26

Nginx防盗链配置指南

防盗链(Hotlink Protection)是防止其他网站直接链接到你网站资源(如图片、视频、CSS/JS文件等)的一种技术手段。以下是Nginx防盗链的几种配置方法:

基本防盗链配置

location ~* \.(jpg|jpeg|png|gif|webp|css|js|mp4|flv|swf)$ {
    valid_referers none blocked server_names
               *.yourdomain.com
               ~\.google\. ~\.bing\. ~\.yahoo\.
               ~\.baidu\. ~\.so\. ~\.sogou\.
               ~\.youdao\. ~\.soso\. ~\.360\.
               ~\.feedburner\. ~\.feedsky\.;

    if ($invalid_referer) {
        return 403;
        # 或者可以重定向到一个提示图片
        # rewrite ^ /anti-hotlink.jpg;
    }
}

配置说明

  1. valid_referers 定义允许的来源:

    • none - 直接访问(无Referer)
    • blocked - 有Referer但被防火墙或代理删除
    • server_names - 本服务器名
    • 域名列表 - 允许的特定域名
    • 正则表达式 - 以~开头的模式
  2. $invalid_referer 变量会在Referer不匹配时设置为1

高级防盗链配置

1. 允许空Referer(直接访问)

valid_referers none blocked server_names;

2. 白名单+搜索引擎

valid_referers none blocked server_names
           *.yourdomain.com
           ~\.google\. ~\.bing\. ~\.yahoo\.
           ~\.baidu\. ~\.so\. ~\.sogou\.
           ~\.youdao\. ~\.soso\. ~\.360\.;

3. 返回403或替换图片

if ($invalid_referer) {
    return 403;
    # 或者
    # rewrite ^ /path/to/anti-hotlink.jpg;
}

4. 特定目录防盗链

location /images/ {
    valid_referers none blocked server_names *.yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
}

使用secure_link模块防盗链

更安全的防盗链方式(需要Nginx编译时包含--with-http_secure_link_module):

location /download/ {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "your_secret_key$secure_link_expires$uri";

    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 410;
    }
}

测试配置

  1. 测试配置语法:
nginx -t
  1. 重载配置:
nginx -s reload
  1. 使用curl测试:
# 测试允许的Referer
curl -I -H "Referer: http://www.yourdomain.com" http://yourserver.com/image.jpg

# 测试不允许的Referer
curl -I -H "Referer: http://othersite.com" http://yourserver.com/image.jpg

注意事项

  1. 防盗链可能会影响SEO,确保允许搜索引擎的Referer
  2. 某些浏览器扩展或隐私模式可能会阻止Referer发送
  3. 过于严格的防盗链可能会影响正常用户访问
  4. 对于CDN资源,需要在CDN层面也配置相应的防盗链规则

希望这些配置能帮助你有效防止资源盗链。根据实际需求调整白名单和规则即可。