防盗链(Hotlink Protection)是一种防止其他网站直接链接到您服务器上的资源(如图片、视频、文件等)的技术手段。当其他网站未经许可直接引用您的资源时,会消耗您的服务器带宽和资源。

Nginx 防盗链配置方法

基本防盗链配置

location ~* \.(jpg|jpeg|png|gif|webp|mp4|flv|pdf)$ {
    valid_referers none blocked server_names *.example.com example.com;
    
    if ($invalid_referer) {
        return 403;
        # 或者可以重定向到一个提示图片
        # rewrite ^ /anti-hotlink.jpg;
    }
}

配置说明

  1. location ~* \.(jpg|jpeg|png|gif|webp|mp4|flv|pdf)$ 匹配常见的静态文件扩展名

  2. valid_referers 定义合法的引用来源:

    • none:直接访问(无Referer)

    • blocked:Referer存在但被防火墙或代理删除

    • server_names:允许的域名列表

  3. $invalid_referer 变量会在Referer不合法时为1

高级配置选项

允许空Referer(直接访问)

valid_referers none blocked server_names *.example.com example.com;

只允许特定域名访问

valid_referers server_names example.com sub.example.com;

使用正则表达式匹配域名

valid_referers ~\.example\.com$ ~\.mydomain\.com$;

返回自定义错误图片

if ($invalid_referer) {
    rewrite ^ /path/to/your/anti-hotlink.png break;
}

测试配置

  1. 检查nginx配置语法:

    nginx -t
    
  2. 重载nginx配置:

    nginx -s reload
    
  3. 使用curl测试:

    curl -I -H "Referer: http://invalid.com" http://yoursite.com/image.jpg
    

注意事项

  1. 防盗链可能会影响搜索引擎的图片索引

  2. 移动应用或某些特殊场景可能需要额外处理

  3. CDN服务可能需要单独配置

  4. 配置变更后务必测试各种访问场景