valid_referers 仅用于校验 Referer 合法性,防盗链需配合 if 判断和 rewrite/return 实现;其通过 $invalid_referer 变量标识匹配结果,常用于图片 location 块中结合白名单规则(如 none、server_names、域名通配等)实施访问控制。

在 Nginx 中,valid_referers 本身不能直接“实现”防盗链,它只是用来判断请求头中的 Referer 是否合法;真正实现防盗链动作的是配合它的 if 判断和后续的返回或重定向操作。
1. 理解 valid_referers 的作用
valid_referers 指令用于定义一组被允许的 Referer 值(即来源页面地址),Nginx 会根据请求头中的 Referer 字段匹配这些规则,并将结果保存在内置变量 $invalid_referer 中:
- 匹配成功 →
$invalid_referer为 空字符串(即 false) - 匹配失败 →
$invalid_referer为 "1"(即 true)
2. 在 location 中配置图片防盗链
通常把防盗链逻辑放在匹配图片资源的 location 块中,例如:
location ~* \.(jpg|jpeg|png|gif|webp|bmp)$ {
valid_referers none blocked server_names
*.example.com example.com
~\.google\.
~\.baidu\.;
<pre class="brush:php;toolbar:false;">if ($invalid_referer) {
# 返回自定义提示图(推荐)
rewrite ^/.*$ /images/forbidden.png break;
# 或者返回 403(简单粗暴)
# return 403;
# 或者重定向到其他页面
# return 302 https://example.com/403.html;
}}
说明:
-
none:允许空 Referer(如直接访问、书签、HTTPS 页面引用 HTTP 资源等) -
blocked:允许 Referer 存在但被防火墙或浏览器清理过的请求(如某些隐私模式、部分代理) -
server_names:允许当前 server_name 域名下的页面引用 -
*.example.com和example.com:允许主站及子域名引用 -
~\.google\.:正则匹配 Google 搜索结果页(注意转义点号)
3. 注意事项与常见坑
实际使用中需留意以下几点:
-
if在 location 中虽可用,但属于 Nginx 的“危险区域”,不建议在非location块顶层滥用;此处用于简单判断是安全的 - HTTPS 页面引用 HTTP 图片时,浏览器会清空 Referer,导致被拦截 —— 应确保协议一致,或显式加入
none - 移动端 App、微信内嵌页、部分小程序可能不带 Referer 或伪造无效值,可考虑加白名单或改用 Token 鉴权等更可靠方式
- 不要依赖 Referer 防盗链作为唯一安全手段 —— 它极易被伪造,仅适合防止普通盗链,不防恶意爬取
4. 验证是否生效
可通过 curl 手动模拟不同 Referer 测试:
# 正常请求(应放行) curl -H "Referer: https://example.com/article.html" https://www.php.cn/link/05f16c2640c12ab95572262ce25e3f7d <h1>盗链请求(应拦截)</h1><p>curl -H "Referer: <a href="https://www.php.cn/link/91bb27109949e95a96c563d2d4222604">https://www.php.cn/link/91bb27109949e95a96c563d2d4222604</a>" <a href="https://www.php.cn/link/05f16c2640c12ab95572262ce25e3f7d">https://www.php.cn/link/05f16c2640c12ab95572262ce25e3f7d</a></p><h1>空 Referer(若配置了 none,则应放行)</h1><p>curl -H "Referer:" <a href="https://www.php.cn/link/05f16c2640c12ab95572262ce25e3f7d">https://www.php.cn/link/05f16c2640c12ab95572262ce25e3f7d</a>
观察返回内容或状态码是否符合预期。


















