You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx 1.17.8使用proxy_pass时无法移除X-Frame-Options头如何解决?

问题原因

  • 配置层级/优先级错误:Nginx的头操作指令(proxy_hide_header、add_header、more_clear_headers等)有严格的作用域规则:如果当前匹配的location块内存在自定义的add_header配置,上层server/http块的头操作配置不会被继承,你写的删除头规则根本没生效在实际处理请求的块中。
  • 头的来源判断错误:你配置的proxy_hide_header仅能删除上游服务通过proxy_pass返回的响应头,如果这个X-Frame-Options: SAMEORIGIN是Nginx自身配置(比如默认引入的安全配置文件、其他全局add_header规则)主动添加的,proxy_hide_header完全不会生效。
  • 指令使用错误:add_header X-Frame-Options ""的写法无法实现删除头的效果,只会给响应头加一个值为空的X-Frame-Options,浏览器依然会按安全策略拦截;more_set_headers "x-frame-options"如果不带值也不会执行删除操作,仅会保留原值。
  • 配置未正确生效:修改配置后未执行nginx -s reload,或者配置语法错误导致重载失败,旧规则依然在运行。

解决步骤

  1. 先确认头的来源,直接请求上游服务验证是否自带X-Frame-Options:
curl -I 【替换为你的proxy_pass指向的上游服务实际地址】

如果上游本身返回该头,在proxy_pass对应的location块内添加配置:

proxy_hide_header X-Frame-Options;
  1. 排查Nginx全局配置是否主动添加了该头,执行命令导出所有加载的配置:
nginx -T

全局搜索X-Frame-Options关键词,找到主动添加该头的add_header规则,要么删除该规则,要么在需要生效的server/location块内,所有add_header配置的最后一行添加:

more_clear_headers X-Frame-Options;

headers-more模块不区分头名大小写,不需要同时写大小写两种格式。

  1. 配置修改完成后先执行nginx -t验证语法无误,再执行nginx -s reload重载配置,用curl验证响应头是否已经移除X-Frame-Options,测试时注意清空浏览器缓存避免旧的响应头缓存影响验证结果。

内容的提问来源于stack exchange,提问作者noc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:30:01