最基础的图片防盗链通过valid_referers检查Referer合法性并配合if拦截,仅对.jpg/.jpeg/.png/.gif/.webp等静态资源启用,白名单需包含none、blocked及自身域名,非法请求返回403或重定向至占位图。

最基础的图片防盗链,核心就是用 valid_referers 检查请求来源是否合法,并配合简单拦截动作。它不加密、不鉴权,但部署快、生效快,适合大多数静态资源防护场景。
明确你要保护的资源类型
只对图片等易被盗链的静态文件启用校验,避免误伤 HTML、JS、CSS 或 API 接口。常用后缀包括:
-
.jpg/.jpeg -
.png/.gif/.webp - 可按需扩展:
.mp4、.pdf、.zip等
配置时用正则匹配,例如:location ~* \.(jpg|jpeg|png|gif|webp)$。
设置合理的白名单来源
valid_referers 不是“只允许这些”,而是“匹配上就认为合法”,多个条件之间是“或”关系。基础写法推荐包含三类来源:
- none:允许直接输入图片 URL 访问(如用户收藏图、微信/QQ 内置浏览器可能清 Referer)
- blocked:允许被代理或防火墙修改后只剩路径/localhost 的请求(常见于某些内网或调试环境)
-
你的域名:如
example.com、www.example.com,或通配子域*.example.com
示例:valid_referers none blocked example.com www.example.com *.example.com;
拦截非法请求并返回合适响应
valid_referers 本身不拦截,只设置变量 $invalid_referer(值为 1 表示不合法)。必须配合 if 使用:
- 返回 403 错误(最简洁):
if ($invalid_referer) { return 403; } - 重定向到占位图(更友好):
if ($invalid_referer) { rewrite ^/.*$ /images/hotlink-denied.png break; }(需确保该图片本身不参与防盗链)
注意:if 只能在 location 块中使用,且不能嵌套;重定向路径要以 / 开头,避免循环。
避开两个典型坑
新手常因忽略这两点导致自家页面打不开图:
-
Vue/React 等 SPA 首次加载时 Referer 为空:必须保留
none,否则首页图片全挂 -
HTTPS 页面引用 HTTP 图片会被浏览器清除 Referer:若站点已全站 HTTPS,建议后端统一提供 HTTPS 资源,或在
valid_referers中显式加none
不依赖 Referer 的盗链(如爬虫直连、Postman 请求)无法被此方式拦截,但它能挡住 90% 以上的普通盗链行为。

















