插件窝 干货文章 Nginx防盗链怎么配置

Nginx防盗链怎么配置

Referer 防盗 配置 example 985    来源:    2025-04-22

Nginx防盗链配置指南

防盗链(Referer)是防止其他网站直接链接你的资源(如图片、视频等)的有效方法。以下是Nginx防盗链的详细配置方法:

基本防盗链配置

location ~* \.(jpg|jpeg|png|gif|mp4|flv|swf|zip|rar)$ {
    valid_referers none blocked server_names *.example.com example.com;

    if ($invalid_referer) {
        return 403;
        # 或者可以重定向到一张警告图片
        # rewrite ^ /static/images/anti-hotlinking.jpg;
    }
}

配置说明

  1. ~* \.(jpg|jpeg|png|gif|mp4|flv|swf|zip|rar)$ - 匹配这些扩展名的文件
  2. valid_referers - 定义合法的引用来源:

    • none - 允许没有Referer的请求(直接访问)
    • blocked - 允许Referer被防火墙或代理删除的请求
    • server_names - 允许本服务器名的请求
    • *.example.com example.com - 允许这些域名的请求
  3. $invalid_referer - 当Referer不合法时变量为1

高级配置选项

1. 允许空Referer和特定域名

valid_referers none blocked server_names
               *.example.com example.com
               ~\.google\. ~\.bing\. ~\.yahoo\. ~\.baidu\.;

2. 返回自定义错误页面

if ($invalid_referer) {
    return 403;
    # 或者
    # rewrite ^ /403.html;
}

3. 使用正则表达式匹配Referer

valid_referers ~\.(google|bing|yahoo|baidu)\. ~\.(sogou|soso|youdao)\.;

4. 结合防盗链和缓存控制

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    valid_referers none blocked server_names *.example.com;

    if ($invalid_referer) {
        return 403;
    }

    expires 30d;
    add_header Cache-Control "public";
}

注意事项

  1. Referer可以被伪造:防盗链不是绝对安全的,Referer可以被修改
  2. 搜索引擎影响:如果阻止了搜索引擎的Referer,可能影响收录
  3. CDN兼容性:如果使用CDN,需要确保CDN的Referer是合法的
  4. 移动端问题:某些移动应用或浏览器可能不发送Referer

替代方案

对于更安全的防盗链,可以考虑: - 使用签名URL(适合视频等大文件) - 使用token验证 - 使用Nginx的secure_link模块

希望这些配置能帮助你有效防止资源被盗链。根据你的实际需求调整配置参数。