valid_referers本身不拦截请求,需配合if判断$invalid_referer变量并用rewrite或return返回指定图片;必须置于server或location块中,支持none、blocked、域名通配及正则匹配,且占位图路径须独立配置避免循环拦截。

直接在 Nginx 配置中用 valid_referers 判断来源,匹配失败时用 rewrite 或 return 返回指定图片,是最常用且可靠的做法。
配置 valid_referers 限定合法来源
在 server 或 location 块中定义允许的 Referer,支持域名、正则、空 Referer(直接访问)等:
valid_referers none blocked server_names *.example.com example.com;-
none允许无 Referer 请求(如书签、HTTPS 页面跳转) -
blocked允许 Referer 被防火墙/代理 stripped 的情况(即 Referer 存在但协议不匹配) -
server_names后接具体域名,支持通配符*,但不支持路径或参数
检测失败后返回指定图片
利用内置变量 $invalid_referer(Nginx 自动设为 1 或 0),配合 rewrite 或 return:
- 用
rewrite重写请求到本地一张占位图(推荐,可保留原 URL 日志):if ($invalid_referer) { rewrite ^/.*\.(jpg|jpeg|png|gif)$ /static/forbidden.png break; } - 用
return直接响应(更轻量,但会改变 HTTP 状态码):if ($invalid_referer) { return 302 /static/forbidden.png; } - 确保
/static/forbidden.png图片存在且可被公开访问(不要放在受防盗链保护的 location 下)
注意 location 匹配与 root 设置
返回图片需能被正确找到,建议单独配置静态资源 location:
- 把占位图放在独立路径如
/static/,并确保该路径有明确的root或alias - 例如:
location /static/ { alias /var/www/assets/; },那么/static/forbidden.png对应文件就是/var/www/assets/forbidden.png - 避免在防盗链 location 内嵌套 return 图片路径,否则可能触发二次防盗链拦截
测试与验证要点
实际生效前建议验证几类典型请求:
- 直接浏览器输入图片 URL(Referer 为空 → 应放行或按
none规则处理) - 从非白名单网站 iframe 或 img 标签引用(Referer 为对方域名 → 应返回占位图)
- 用 curl 模拟 Referer:
curl -H "Referer: https://bad-site.com" https://yoursite.com/img/test.jpg - 检查 Nginx 错误日志,确认是否因路径错误导致 404(比如占位图找不到)











