最有效的防盗链测试方式是直接在真实请求链路中验证,包括用curl模拟不同Referer场景、浏览器盗链页实测、Nginx日志分析及压力测试对比带宽与I/O变化。

直接在真实请求链路中验证防盗链是否生效,是最有效的测试方式。关键不是看配置有没有写错,而是看它能不能在流量进来时准确拦截非法 Referer,同时放行合法访问。
用 curl 模拟不同来源发起请求
这是最常用、最可控的测试手段。Referer 字段可被客户端自由指定,正好用来覆盖各种典型场景:
- 不带 Referer(直接访问):
curl http://your-site.com/img/test.jpg—— 应该放行(前提是配置了none) - 合法来源(自己域名):
curl -e "https://yourdomain.com/page.html" http://your-site.com/img/test.jpg—— 应该正常返回图片 - 非法来源(盗链网站):
curl -e "https://bad-site.com/post" http://your-site.com/img/test.jpg—— 应该返回 403 或跳转到提示图 - 空 Referer 或被屏蔽的 Referer(如 HTTPS→HTTP 跳转):
curl -e "" http://your-site.com/img/test.jpg—— 若配置含blocked,应放行
用浏览器打开盗链页面观察资源加载行为
搭建一个最小化盗链页(比如另一台服务器上的 HTML 文件),里面嵌入你 Nginx 上的图片链接:
示例代码:
在浏览器中打开这个页面,通过开发者工具的 Network 面板查看该图片请求的响应状态码和实际加载结果:
- 看到 403 错误或返回一张“禁止盗链”图片 → 防盗链生效
- 图片正常显示 → 检查 valid_referers 白名单是否漏掉了当前 Referer 域名,或是否误配了
server_names导致匹配失败
对比服务器日志确认拦截效果
开启 Nginx 的 access_log,并在防盗链 location 块中单独记录请求,例如:
access_log /var/log/nginx/hotlink.log main;
valid_referers none blocked *.yourdomain.com;
if ($invalid_referer) { return 403; }
}
然后用上述 curl 或浏览器方式发起一批请求,再执行:
grep "403" /var/log/nginx/hotlink.log | wc -l如果数字与预期非法请求数一致,说明拦截逻辑已按规则运行;再检查正常 Referer 请求是否出现在日志中且无 403,就能确认白名单未误伤。
模拟真实流量压力观察带宽变化
若已有被盗链的历史流量特征(比如某几个 Referer 大量刷图),可用 ab 或 wrk 构造定向压测:
wrk -t2 -c100 -d30s --latency -H "Referer: https://badsite.net/forum/" http://your-site.com/img/big.jpg分别测试开启/关闭防盗链时:
- Nginx 的 active connections 和 $request_time 分布
- 系统层面的网络吞吐(
iftop -P 80或ss -i) - 目标图片文件的磁盘 I/O(
iostat -x 1)
开启后若非法 Referer 请求明显下降、带宽占用回落、I/O 压力减轻,就说明它正在切实保护你的带宽资源。


















