Nginx 防盗链配置详解:none blocked 的作用与最佳实践
在网站运维和前端开发中,防止资源被其他网站直接引用是一个常见需求,尤其是图片、CSS 或 JS 文件。Nginx 提供了 valid_referers
指令用于控制访问来源,其中 none blocked
的使用方式直接影响资源访问的兼容性和安全性。
一、none blocked 的作用
- none:允许没有 Referer 的访问。典型场景包括用户在浏览器中直接输入资源地址,或者浏览器/插件屏蔽了 Referer。
- blocked:允许 Referer 被中间设备或浏览器“隐藏”的情况。
例如配置为:
valid_referers none blocked *.example.com;
表示允许空 Referer、被屏蔽的 Referer,以及来自 *.example.com
的引用。
如果去掉 none blocked
:
valid_referers *.example.com;
效果更严格:
- 用户直接在浏览器打开资源(Referer 为空) → 会被拦截
- 浏览器或插件屏蔽 Referer → 会被拦截
- 只有来自
*.example.com
的页面引用才放行
二、经验建议(运维角度)
面向普通用户的网站(例如 WordPress 博客、资讯站、软件下载站)
建议保留none blocked
,否则容易误伤正常访问用户,导致图片或 CSS 加载失败。只在意防止其他网站直接引用资源
可以保留none
,去掉blocked
,这样允许用户直接访问资源,但不放行被屏蔽 Referer 的情况。最严格的防盗链
去掉none blocked
,但是必须接受部分正常访问被拒绝的风险。
简而言之:
- 要兼容性 → 使用
none blocked *.example.com;
- 要严格拦截 → 使用
*.example.com;
通过合理配置 valid_referers
,可以在兼顾资源安全和用户体验之间取得平衡,使网站资源既不被盗链,又能保证访问的顺畅性。
THE END