Nginx通过valid_referers指令实现Referer白名单防盗链,仅允许none、blocked、指定域名或正则匹配的来源访问静态资源,非法请求返回403或重定向;因Referer可伪造,仅作基础防护,需配合签名URL等增强安全。

通过 Nginx 的 valid_referers 指令可以有效防止图片、视频等静态资源被其他网站盗链。核心思路是:只允许来自指定域名(或空 referer)的请求访问资源,其余一律拒绝或重定向。
配置 valid_referers 识别合法来源
在 server 或 location 块中使用 valid_referers 定义哪些 referer 被认为合法。Nginx 会将结果存入内置变量 $invalid_referer(值为 1 表示非法,0 表示合法)。
- 允许本站域名及子域名:
valid_referers domain.com *.domain.com; - 允许空 referer(如直接访问、书签、HTTPS 页面引用 HTTP 资源时可能为空):
valid_referers none; - 支持正则匹配,例如匹配多个二级域名:
valid_referers ~\.example\.(com|org); - 支持字符串列表:
valid_referers domain.com baidu.com google.com;
拦截非法 referer 请求
结合 if 和 return 或 rewrite 实现拦截逻辑。注意:if 在 location 中使用是安全的,但避免在 server 级别滥用。
- 返回 403 禁止访问:
if ($invalid_referer) { return 403; } - 返回固定占位图(更友好):
if ($invalid_referer) { rewrite ^/.*\.(jpg|jpeg|png|gif|webp|mp4|webm)$ /static/banned.png break; } - 重定向到首页或提示页:
if ($invalid_referer) { return 302 https://domain.com/403.html; }
精准作用于图片和视频路径
不要全局限制,而是针对静态资源路径单独配置,避免影响 API 或 HTML 页面。
- 用 location 匹配常见媒体后缀:
location ~* \.(jpg|jpeg|png|gif|webp|svg|mp4|avi|mov|webm|ogg)$ { ... } - 配合 root 或 alias 正确指向文件路径,确保 rewrite 或 return 能正常响应
- 若资源在 CDN 或独立域名下,需在对应 server 块中配置,而非源站主 server
测试与验证要点
配置生效后需实际验证,避免误杀或失效。
- 用 curl 模拟不同 referer 测试:
curl -H "Referer: https://baidu.com" https://domain.com/image.jpg - 检查浏览器开发者工具 Network 标签,确认图片请求的 Response Status 和 Referer 头
- 注意 HTTPS 站点引用 HTTP 资源时浏览器可能清空 referer(Referrer Policy),可临时设为
no-referrer-when-downgrade或允许空 referer - 移动端 WebView、微信内嵌页等可能不带 referer,必要时加入
none或白名单 UA 辅助判断(但 UA 易伪造,不推荐单独依赖)
不复杂但容易忽略 referer 的大小写、协议差异和空值场景,合理组合 valid_referers 规则 + 精确 location + 友好响应,就能稳妥防住大部分盗链。


















