nginx referer-policy 和 referer
Nginx的Referrer-Policy配置用于控制HTTP请求中Referer头的发送行为,是W3C提出的安全策略标准4。以下是关键配置方法和策略说明:
- 基础配置语法
在Nginx的server块中添加HTTP响应头实现:
add_header Referrer-Policy "策略值";
支持9种策略值,包括默认的no-referrer-when-downgrade
4。
- 常用策略类型
no-referrer
:完全禁用Referer头origin
:仅发送协议+域名+端口(如https://example.com
)strict-origin
:HTTPS->HTTPS时发送源域名,降级到HTTP时不发送same-origin
:同源请求发送完整Referer,跨域不发送4。
- 完整安全配置示例
建议与其他安全头配合使用:
server { add_header Referrer-Policy "strict-origin"; add_header Content-Security-Policy "default-src 'self'"; add_header X-Frame-Options "SAMEORIGIN"; }
这种组合可有效防御点击劫持和跨站脚本攻击14。
- 注意事项
- 策略生效需确保Nginx版本支持
add_header
指令 - 移动端浏览器对部分策略(如
strict-origin-when-cross-origin
)兼容性需测试23 - 配置后需执行
nginx -t
测试并重载服务5。
该策略与防盗链(valid_referers)的区别在于:Referrer-Policy是客户端行为规范,而valid_referers是服务端验证机制24。
nginx Referrer-Policy 默认策略
Nginx的Referrer-Policy默认策略为no-referrer-when-downgrade
,该策略行为如下:
默认触发条件
当未显式配置Referrer-Policy
头时,浏览器会自动采用此策略36。策略行为规则
- HTTPS → HTTPS:发送完整Referer头(包含源URL路径)
- HTTPS → HTTP:不发送任何Referer信息(协议降级保护)
- HTTP → HTTP:发送完整Referer头68。
- 与其他策略对比
- 比
strict-origin
宽松:后者在HTTP→HTTP时仅发送源域名 - 比
unsafe-url
严格:后者始终发送完整Referer无论协议降级68。
- 显式配置方法
可通过Nginx的add_header
指令强制指定:
add_header Referrer-Policy "no-referrer-when-downgrade";
该配置需放置在server或location块中
Nginx的referer功能主要通过HTTP请求头中的Referer字段实现访问控制和请求修改,主要应用场景包括防盗链和请求头定制14。以下是核心功能说明:
- 防盗链配置
- 使用
valid_referers
指令定义合法来源域名,配合$invalid_referer
变量拦截非法请求:
location ~* \.(jpg|png)$ { valid_referers none blocked *.example.com; if ($invalid_referer) { return 403; } }
原理是通过校验请求头中的Referer值,若不在白名单则返回40315。
- 修改Referer头
- 通过
proxy_set_header
指令可覆盖原始Referer值,常用于反向代理场景:
location /proxy/ { proxy_set_header Referer "https://trusted.com"; }
该方法可伪造Referer实现访问控制或统计需求23。
- 安全特性
- Referer字段易被伪造,不可作为唯一安全依据,需结合其他验证手段15
none
参数允许直接访问(无Referer),blocked
处理被防火墙修改的Referer48
典型应用场景包括:防止图片盗链、限制API调用来源、跨站请求统计等67。配置生效需重启Nginx服务