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

nginx.ingress配置X-Frame-Options:Deny响应头不生效如何解决

问题根因

你配的X-Frame-Options: Deny最终返回成SAMEORIGIN,和snippet语法没关系,是执行顺序和配置优先级的问题:
默认部署的Ingress Nginx大多会开启全局默认安全头,在全局ConfigMap里硬编码了X-Frame-Options: SAMEORIGIN,而你用configuration-snippet写的自定义头执行时机更早,后续内置逻辑注入头的时候会直接把你设的值覆盖掉。

解决方法

按场景选对应的处理方式即可:

  • 最快修复:在现有snippet里先清掉原有头再设置,不用改其他配置
    把原来的注解改成下面的内容,先调用more_clear_headers删掉已经存在的X-Frame-Options头,再重新赋值,就不会被后续逻辑覆盖:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_clear_headers "X-Frame-Options";
      more_set_headers "X-Frame-Options: DENY";
      more_set_headers "Cross-Origin-Opener-Policy: same-origin";
    

    提示:X-Frame-Options的标准值是全大写的DENY、SAMEORIGIN、ALLOW-FROM 地址,虽然大小写不影响识别,建议按规范书写。

  • 最稳的写法:用Ingress Nginx原生的自定义头注解,不要在snippet里硬塞头配置
    这种方式配置的头会在内置逻辑执行完成后再注入,不会被默认值覆盖:
    1. 先在业务所在命名空间创建一个存储自定义头的ConfigMap:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: custom-headers
      namespace: <替换成你自己的业务命名空间>
    data:
      X-Frame-Options: "DENY"
      Cross-Origin-Opener-Policy: "same-origin"
    
    1. 给对应的Ingress加注解关联这个ConfigMap即可:
    nginx.ingress.kubernetes.io/custom-headers: "<替换成你自己的业务命名空间>/custom-headers"
    
  • 全局统一配置:如果集群所有服务都要设为DENY,直接修改Ingress Nginx的全局ConfigMap(一般在ingress-nginx命名空间下,名为ingress-nginx-controller),找到data段里的X-Frame-Options配置项,把值从SAMEORIGIN改成DENY即可。如果不需要全局统一管控,直接删掉这行配置,之后单个Ingress自定义的头就不会被全局值覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:18:22