加 none 是为了允许空 referer 请求,否则浏览器直接访问静态资源时因无 referer 被拦截导致 403;它放行地址栏输入、书签、微信内嵌页、app 等场景,是支持 https 引用 http 资源及移动端访问的基础。

直接在 valid_referers 指令中加入 none,就能允许空 Referer,确保用户在浏览器地址栏输入 URL 或从书签访问时资源正常加载。
为什么必须加 none
浏览器直接访问一个图片、CSS 或 JS 文件时,不会携带 Referer 字段(即 Referer 为空)。如果配置里没写 none,Nginx 就会把这类请求判定为非法,$invalid_referer 变为 1,导致返回 403 或跳转到提示图——你自己的网站反而打不开静态资源。
正确写法示例
以下配置放在 location 块中(比如匹配图片):
location ~* \.(jpg|jpeg|png|gif|webp)$ {
valid_referers none blocked www.example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
-
none:明确放行 Referer 为空的请求(如直接输入 URL、微信内嵌页、部分 App) -
blocked:放行 Referer 存在但被代理/防火墙截断或格式异常的情况(如只有域名没有协议) - 后续域名(如
www.example.com)是你要允许的合法来源
常见误区提醒
这些容易出错的地方要注意:
- 只写
valid_referers www.example.com;—— 不加none,自己页面都可能加载不了图片 - 把
none写在最后或中间都没关系,顺序不影响匹配逻辑 - HTTPS 站点引用 HTTP 资源时,浏览器会清空 Referer(Referrer Policy 限制),此时也依赖
none才能通过 - 移动端 App、小程序、桌面客户端通常不发 Referer,若需支持,
none是基础保障
验证是否生效
用两种方式快速测试:
- 在浏览器地址栏直接输入图片 URL(如
https://yoursite.com/logo.png),应能正常显示 - 用 curl 模拟空 Referer:
curl -H "Referer:" https://yoursite.com/logo.png,响应码应为 200











