温馨提示×

debian nginx如何防盗链

小樊
44
2026-10-27 00:55:14
栏目: 智能运维

在 Debian 上用 Nginx 防盗链,最常用、最有效的方式是使用 ngx_http_referer_module(基于 Referer 判断)。下面按常见场景给你一套实用配置。


一、基础防盗链(图片/视频等静态资源)

1. 编辑站点配置

sudo nano /etc/nginx/sites-available/your_site

2. 在 server 或 location 中加入

location ~* \.(jpg|jpeg|png|gif|webp|mp4|avi|mov)$ {
    valid_referers none blocked server_names
                   *.yourdomain.com
                   yourdomain.com;

    if ($invalid_referer) {
        return 403;
        # 或者返回一张提示图
        # rewrite ^/.*\.(jpg|png)$ /anti-hotlink.png last;
    }
}

3. 测试并重启

sudo nginx -t
sudo systemctl reload nginx

二、参数说明(很重要)

valid_referers none blocked server_names ...
参数 含义
none 允许无 Referer(浏览器直链、APP)
blocked Referer 被防火墙/代理隐藏
server_names 允许本站域名
*.yourdomain.com 允许子域名

❌ 不推荐:完全禁用 none,否则微信/APP 无法访问。


三、只允许 HTTPS 防盗链(推荐)

valid_referers https://yourdomain.com https://*.yourdomain.com;

四、整站防盗链(不推荐,影响 SEO)

valid_referers server_names;
if ($invalid_referer) {
    return 403;
}

五、白名单方式(允许部分站点)

valid_referers server_names
               *.baidu.com
               *.google.com;

六、返回图片代替 403(更友好)

if ($invalid_referer) {
    rewrite ^/.*\.(jpg|png|gif)$ /hotlink.png last;
}

七、加强方案(进阶)

1. 配合 CDN(如 Cloudflare)

  • CDN 层直接拦截
  • 设置 Referer 规则

2. Token 防盗链(最安全)

  • 视频/下载接口常用
  • 例如:/video.mp4?token=xxx&expire=1700000000

3. 限速(防恶意下载)

limit_rate 100k;

八、验证防盗链是否生效

curl -I -e "http://bad.com" http://yourdomain.com/test.jpg
# 应返回 403

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

  • 是 图片 / 视频 / 下载文件
  • 是否使用 CDN
  • 是否要 APP / 微信可用

我可以直接给你可复制的最终配置。

0 踩