通过在匹配css文件的location块中配置valid_referers白名单并配合if($invalid_referer){return 403;}实现盗链防护,精准拦截非法referer请求。

直接在匹配 CSS 文件的 location 块里加 valid_referers 白名单判断,配合 if ($invalid_referer) 返回 403 即可。核心是只放行你认可的来源,其他一律拦截。
明确匹配 CSS 资源
用正则 location 精准捕获所有 CSS 请求,避免误伤或漏防:
- 推荐写法:
location ~* \.(css)$—— 忽略大小写,只匹配以 .css 结尾的请求 - 若需同时防护 JS、字体等,可扩展为:
location ~* \.(css|js|woff2|ttf)$ - 不要用过于宽泛的路径(如
location /static/),除非你确认该路径下全是需保护的资源
设置可信 Referer 白名单
valid_referers 定义哪些来源算合法,多个规则是“或”关系:
-
none:允许用户直接在浏览器地址栏输入 CSS 地址访问(比如调试时) -
blocked:放行被代理、隐私模式或某些浏览器清空了 Referer 的请求 -
yourdomain.com:精确匹配主域名(如 example.com) -
*.yourdomain.com:允许所有子域名(如 cdn.example.com、blog.example.com) - 可叠加写:
valid_referers none blocked example.com *.example.com;
拦截非法请求并返回明确状态码
校验后必须显式处理,推荐标准做法:
- 写
if ($invalid_referer) { return 403; }—— 语义清晰,CDN 和浏览器都能正确识别拒绝 - 避免用
rewrite跳转到提示图,否则 HTTP 状态仍是 200,掩盖盗链行为 - 如需展示友好提示,改用:
error_page 403 =200 /static/referer-denied.css;(保持 403 状态,但返回一个空或注释版 CSS)
验证与注意事项
配置生效后建议快速验证:
- 用
curl -H "Referer: https://bad-site.com" https://yoursite.com/style.css应返回 403 - 用
curl -I https://yoursite.com/style.css(无 Referer)应返回 200 - 确保配置放在
server或对应location块内,不能写在http或upstream中 - 注意:Referer 可被伪造,此方案防的是普通盗链;高敏感场景建议叠加 URL 签名(
secure_link)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











