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 的页面引用才放行

二、经验建议(运维角度)

  1. 面向普通用户的网站(例如 WordPress 博客、资讯站、软件下载站)
    建议保留 none blocked,否则容易误伤正常访问用户,导致图片或 CSS 加载失败。

  2. 只在意防止其他网站直接引用资源
    可以保留 none,去掉 blocked,这样允许用户直接访问资源,但不放行被屏蔽 Referer 的情况。

  3. 最严格的防盗链
    去掉 none blocked,但是必须接受部分正常访问被拒绝的风险。

简而言之:

  • 要兼容性 → 使用 none blocked *.example.com;
  • 要严格拦截 → 使用 *.example.com;

通过合理配置 valid_referers,可以在兼顾资源安全和用户体验之间取得平衡,使网站资源既不被盗链,又能保证访问的顺畅性。

THE END