nginx图片防盗链核心是valid_referers定义referer白名单,配合if($invalid_referer)拦截非法请求并返回403或重定向至占位图,需限定于图片location块中配置,支持none、域名、通配符及正则匹配。

Nginx 防盗链保护图片资源,核心是通过 valid_referers 指令限制 HTTP Referer 请求头,只允许指定来源(如自己网站)访问图片资源,其他来源返回 403 或重定向到默认图。
配置 valid_referers 白名单
在 server 或 location 块中定义合法来源,支持域名、通配符、正则等写法:
-
允许本站所有子域和主域访问:
valid_referers *.example.com example.com; -
允许空 Referer(直接访问、书签、HTTPS 跳转等):
valid_referers none *.example.com example.com; -
用正则匹配多个域名(注意转义点):
valid_referers ~^(https?://)?(www\.)?example\.com$ ~^(https?://)?test\.site$;
拦截非法请求并返回处理
结合 if 判断 $invalid_referer 变量,对不合规请求做响应:
-
返回 403 禁止访问:
if ($invalid_referer) { return 403; } -
重定向到默认占位图(推荐,更友好):
if ($invalid_referer) { rewrite ^/.*\.(jpg|jpeg|png|gif)$ /static/forbidden.png break; } - 注意:rewrite 需确保 /static/forbidden.png 存在且可被访问,否则会 404
精准匹配图片路径
把防盗链逻辑限定在图片资源上,避免影响其他静态文件或接口:
-
用 location 匹配常见图片后缀:
location ~* \.(jpg|jpeg|png|gif|webp|bmp)$ { ... } -
若图片在特定目录(如 /uploads/),可更精确:
location ^~ /uploads/ { valid_referers ...; if ($invalid_referer) { return 403; } } - 避免在根 location 或 proxy_pass 块中全局启用,防止误拦 API 或 JS/CSS
测试与验证要点
配置后务必验证是否生效,常见检查项:
-
用 curl 模拟不同 Referer 测试:
curl -H "Referer: https://baidu.com" https://yoursite.com/test.jpg应返回 403 或占位图 - 浏览器直接打开图片 URL(无 Referer)应放行(前提是配置了
none) - Nginx 日志里留意
$invalid_referer的值(为 1 表示不合法),便于排查 - HTTPS 站点引用 HTTP 页面时可能丢失 Referer,需确认浏览器策略(Referrer Policy)是否影响











