【问题标题】:Why Ingress NGINX removes my response headers为什么 Ingress NGINX 会删除我的响应标头
【发布时间】:2020-08-25 11:19:55
【问题描述】:

我有 ASP.NET WebApi 项目,它会在每个请求上返回安全标头:

当我使用 Ingress NGINX 在 Kubernetes 集群中运行此应用程序时,我的标头丢失了

如何配置 NGINX 以使用来自我的应用程序的响应标头?为什么 Ingress NGINX 会删除我的响应标头?

我对 NGINX 配置没有任何经验。请建议如何在 k8s 集群中执行此操作。谢谢

【问题讨论】:

  • 你能确保你的 nginx-controller 使用你创建的这个 configmap 吗?
  • 是的,它正在使用中。因为当我向它添加 "server-tokens": "false" 时,Server 标头消失了。
  • 我认为响应不会通过入口控制器。你的后端也是 nginx 吗?

标签: nginx asp.net-web-api kubernetes kubernetes-ingress


【解决方案1】:

在你的入口中使用以下注释来设置响应头

    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "X-Frame-Options: Deny";
      more_set_headers "X-Xss-Protection: 1; mode=block";
      more_set_headers "X-Content-Type-Options: nosniff";

【讨论】:

  • 是否有可能使用我的应用程序中的标头?我有很多入口,我不能为每个入口设置这个
  • 我的应用程序已经返回了我需要的标头,为什么 nginx 删除它?
【解决方案2】:

您无法找到这些标头,因为流量来自充当代理的 nginx 入口控制器。要添加一些自定义标题,您可以使用以下给定步骤。

  1. 创建一个文件并将其命名为custom-headers.yml 并添加以下数据。

    apiVersion: v1
    data:
      X-Frame-Options: "Deny"
      X-Xss-Protection: "1; mode=block"
      X-Content-Type-Options: "nosniff"
      kind: ConfigMap
    metadata:
    name: custom-headers
    namespace: ingress-nginx
    

此文件将在 ingress-nginx 命名空间中创建一个 ConfigMap。应用此 ConfigMap: kubectl apply -f custom-headers.yml

现在我们需要让我们的 nginx 入口控制器使用这个新的 ConfigMap。为此,我们需要将我们的配置映射添加到目前一直在使用的全局配置中。为此创建一个文件 configmap.yml 并添加以下数据。 api版本:v1 数据: proxy-set-headers: "ingress-nginx/custom-headers" 种类:ConfigMap 元数据: 名称:nginx-配置 命名空间:入口-nginx 标签: app.kubernetes.io/名称:ingress-nginx app.kubernetes.io/part-of: ingress-nginx

通过以下方式应用此配置: kubectl apply -f configmap.yml

使用以下命令检查您的配置:kubectl exec <nginx-controller pod name> -n ingress-nginx cat /etc/nginx/nginx.conf

【讨论】:

  • 这仅适用于输入请求,我需要添加响应头
【解决方案3】:

我自己没有尝试过,但我认为您需要启用此设置。

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#allow-backend-server-header

data:
    allow-backend-server: "true"

您可以尝试通过注释启用此设置。

【讨论】:

  • 小心“我没试过”的答案。推荐这里的一些人牺牲他们的时间来测试提出的答案。有些人恶意地做同样的事情。这两种类型都倾向于对无效的未经测试的答案投反对票。一些对未经测试的答案投反对票 - 是否有效。
  • @Yunnosch 感谢您提出新观点的建议。在这个回复之前我从来没有想过这个。
  • 这似乎只影响查看文档的Server 标头...
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 2012-04-20
  • 2018-07-07
  • 2015-02-26
相关资源
最近更新 更多