本文详细介绍如何通过Nginx的Referer白名单机制实现网站资源防盗链,包含原理分析、配置方法、正则表达式优化及常见问题排查。提供可直接使用的代码片段,帮助开发者快速部署高效防盗链策略,有效防止流量盗用。
一、Referer防盗链原理
HTTP Referer是请求头中的一个字段,用于标识请求来源。当用户从A网站点击链接访问B网站时,B网站的服务器日志中会记录来自A网站的Referer信息。通过验证该字段,可判断请求是否来自合法来源。
二、Nginx基础防盗链配置
在Nginx配置文件的server或location块中添加以下规则:
location ~ .(jpg|jpeg|png|gif|mp4|pdf)$ {
valid_referers none blocked server_names .yourdomain.com;
if ($invalid_referer) {
return 403;
或重定向到警告图片
rewrite ^ /static/images/anti-hotlinking.png;
}
}
三、高级白名单配置技巧
1. 多域名白名单配置
valid_referers server_names
.trusted-domain.com
api.legitimate-partner.com
static.cdn-provider.net;
2. 正则表达式匹配
valid_referers ~.(google|bing). ~.yandex.;
3. 允许空Referer(直接访问)
valid_referers none blocked;
四、性能优化建议
- 将静态资源防盗链配置放在单独的location块中
- 避免在全局使用if条件判断
- 对高频访问的图片类型优先处理
- 结合map指令优化多域名判断
五、常见问题排查
- CDN失效问题:确保CDN供应商的域名加入白名单
- 移动端异常:部分APP内置浏览器可能不发送Referer
- HTTPS跳转:从HTTPS页面跳转到HTTP时Referer可能被剥离
- 缓存影响:修改配置后清除浏览器和CDN缓存测试
六、补充安全措施
建议结合以下方式增强防护:
- 添加
add_header X-Frame-Options SAMEORIGIN
防嵌套 - 设置
Content-Security-Policy
头 - 定期审计白名单域名
- 关键资源添加时效性签名
通过以上配置,可有效阻止90%以上的盗链行为。对于专业盗链者,建议结合日志分析、速率限制等方案形成多层防护体系。
评论