Nginx配置X-Frame-OPTIONS后如何为部分URL跳过该跨域限制
Nginx特定URL跳过X-FRAME-OPTIONS限制配置方法
Nginx的add_header指令具备层级继承特性:只有当前配置块没有定义任何add_header规则时,才会继承上层配置的响应头规则。利用这个特性就可以实现特定URL跳过全局X-FRAME-OPTIONS限制,两种常用配置方案如下:
方案1:location匹配规则覆盖(适合少量特定URL场景)
在你现有站点的server配置块中,新增匹配需要跳过限制的URL的location块,在块内重写X-FRAME-OPTIONS规则即可,配置示例:
server { listen 80; server_name 你的站点域名; root 你的站点根目录; # 你原有全局配置的X-FRAME-OPTIONS规则 add_header X-FRAME-OPTIONS "SAMEORIGIN" always; # 匹配需要跳过限制的URL,支持正则匹配多个路径 location ~ ^/(公共嵌入路径|分享接口路径)/ { # 方式1:Nginx 1.23.3及以上版本直接设置为空即可移除该响应头 add_header X-FRAME-OPTIONS "" always; # 方式2:如果是仅允许指定域名嵌入,可修改为如下配置 # add_header X-FRAME-OPTIONS "ALLOW-FROM https://允许嵌入的域名" always; # 方式3:已安装ngx_headers_more模块的版本可直接清除头 # more_clear_headers X-FRAME-OPTIONS; # 注意:如果全局还有其他add_header配置(比如X-Content-Type-Options等),需要在当前块内重新编写一遍,否则会丢失 # add_header X-Content-Type-Options "nosniff" always; # add_header X-XSS-Protection "1; mode=block" always; # 你原有该路径下的其他配置保持不变,例如反向代理、PHP转发规则等 } # 其他原有配置保持不变 location / { try_files $uri $uri/ /index.php$is_args$args; } }
方案2:map指令动态赋值(适合大量需要跳过的URL场景)
如果需要跳过限制的URL较多,可使用map指令统一管理规则,减少重复配置:
- 首先在Nginx全局http配置块(通常是nginx.conf文件内)新增如下map配置:
http { # 其他原有http全局配置保持不变 map $request_uri $frame_header_value { default "SAMEORIGIN"; # 逐行添加需要跳过限制的URL匹配规则,匹配到则值设为空 ~^/(公共嵌入路径|分享接口路径)/ ""; ~^/特定单页面.html$ ""; } }
- 再修改你站点的server配置块,把原来的硬编码X-FRAME-OPTIONS值替换为map定义的变量:
server { listen 80; server_name 你的站点域名; # 替换原有X-FRAME-OPTIONS配置行 add_header X-FRAME-OPTIONS $frame_header_value always; # 其他原有配置全部保持不变 }
配置生效验证
修改完成后执行以下操作验证配置并生效:
- 执行
nginx -t检查配置语法是否正确,返回test is successful再继续操作 - 执行
nginx -s reload重载Nginx配置使规则生效 - 执行
curl -I 测试URL验证响应头,确认目标URL的返回结果中已无X-FRAME-OPTIONS头,或为你设置的预期值
内容的提问来源于stack exchange,提问作者Dnyaneshwar Kshirsagar
相关产品推荐
相关产品推荐

