首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用nginx入口正确设置自定义标头?

如何使用nginx入口正确设置自定义标头?
EN

Stack Overflow用户
提问于 2019-01-07 23:13:36
回答 6查看 49K关注 0票数 14

我有以下配置:

雏形:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: nginx-ingress
  namespace: nginx-ingress
spec:
  selector:
    matchLabels:
      app: nginx-ingress
  template:
    metadata:
      labels:
        app: nginx-ingress
    spec:
      serviceAccountName: nginx-ingress
      containers:
      - image: nginx/nginx-ingress:1.4.2-alpine
        imagePullPolicy: Always
        name: nginx-ingress
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: https
          containerPort: 443
          hostPort: 443
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        args:
          - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret 

主配置:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
  namespace: nginx-ingress
data:
  proxy-set-headers: "nginx-ingress/custom-headers"
  proxy-connect-timeout: "11s"
  proxy-read-timeout: "12s"
  client-max-body-size: "5m"
  gzip-level: "7"
  use-gzip: "true"
  use-geoip2: "true"

自定义标头:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-headers
  namespace: nginx-ingress
data:
  X-Forwarded-Host-Test: "US"
  X-Using-Nginx-Controller: "true"
  X-Country-Name: "UK" 

我遇到以下情况:

  • 如果我更改“代理连接超时”、“代理读取超时”或“客户端最大体大小”之一,我可以看到在控制器吊舱中生成的信任中出现的更改。
  • 如果我更改" gzip - level“(甚至尝试过"use-gzip")或"use-geoip2",我就不会看到生成的信任(例如:"gzip;”总是被注释掉,也没有其他地方提到zip,gzip级别也不会出现)。
  • “ingress/定制标头”中的自定义标头根本没有添加(计划使用它们从geoip2传递值)。

否则,控制器日志显示,我唯一的后端(一个转储头的快速表应用程序)是服务器,我得到预期的响应等等。

我已经从github上的示例中复制了尽可能多的内容,进行了最少的更改,但没有结果(包括查看自定义标头的示例时)。

如有任何意见或建议,将不胜感激。

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-01-08 00:47:06

看起来您使用的是来自NGINX本身的库伯内特斯,而不是进气口-,后者是社区nginx入口控制器。

如果您看到kubernetes的支持的ConfigMap密钥 -ingress,则不支持任何gzip选项。如果您看到了入口-nginx的ConfigMap选项,您将看到可以配置的所有gzip键。

尝试切换到社区 nginx入口控制器。

更新:

您还可以使用配置-片段注释来完成它:

代码语言:javascript
复制
nginx.ingress.kubernetes.io/configuration-snippet: |
   more_set_headers "X-Forwarded-Host-Test: US";
   more_set_headers "X-Using-Nginx-Controller: true";
   more_set_headers "X-Country-Name: UK";
   more_set_headers "Header: Value";
   ...
票数 14
EN

Stack Overflow用户

发布于 2019-04-08 13:34:51

使用导入规则注释。

代码语言:javascript
复制
Example:
 apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "server: hide";
      more_set_headers "X-Content-Type-Options: nosniff";
      more_set_headers "X-Frame-Options: DENY";
      more_set_headers "X-Xss-Protection: 1";
  name: myingress
  namespace: default
spec:
  tls:
  - hosts:

我使用了nginx服务器1.15.9

票数 34
EN

Stack Overflow用户

发布于 2019-01-08 10:38:55

下一代: nginx社区控制器=> =>

控制器=> nginx/ nginx -ingress:edge (如docs中所示)

社区=>代理-集标头的自定义头configmap:“nginx-ingress/定制-头”

用于kubernetes => add- headers的自定义标头configmap:“nginx-ingress/定制-头”

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54083179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档