簡體   English   中英

Nginx 入口控制器未設置 X-Forwarded-Host

[英]Nginx Ingress Controller does not set X-Forwarded-Host

我已經用我的微服務設置了 Nginx 入口控制器; 該微服務使用 Hateoas 生成鏈接; 我有以下 Ingress 集。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "server: imemywork";
    nginx.org/ssl-services: "mic-ser-service"
    nginx.org/client-max-body-size: "1024m"
    nginx.ingress.kubernetes.io/server-snippet: |
      location /service(|/)(.*) {
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $host/service;
        proxy_set_header X-Forwarded-Port  $server_port;
      }
  name: mic-ser-ingress
spec:
  tls:
    - hosts:
      - imemywork.com
      secretName: mic-ser-tls-certificate
  rules:
    - host: api.imemywork.com
      http:
        paths:
        - path: /service(|/)(.*)
          backend:
            serviceName: mic-ser-service
            servicePort: 8080

請求中沒有設置 X-Forwarded-* 標頭; 由於這些都沒有設置,HATEOAS 鏈接是使用 http 和瀏覽器發送的主機產生鏈接; 我是否將它們設置在錯誤的位置? 我還嘗試將位置塊移動到配置片段下,但沒有運氣; 還有什么,我需要在 Nginx Ingress 控制器中設置/啟用嗎?

Bts,在 configuration-snippet 下有 more_set_header 只會將標頭添加到響應中,而不是在對服務器的請求中。

我認為 x-forwaded-* 標頭在 ingress-nginx 中默認設置。 當它到達您的應用程序時,您可能希望將 x-forwarded-proto 標頭更新為“https”。 不幸的是,目前在入口中沒有可用的標准注釋來覆蓋 x-forwarded-* 標頭。 但是,有一種變通方法可用於解決此問題。

您可以編寫自定義入口插件,該插件將負責重寫 x-forwarded-* 標頭。 本評論所述

可以使用插件在不使用自定義模板的情況下更改標頭 X-Forwarded-Port 的值。 https://github.com/kubernetes/ingress-nginx/tree/master/rootfs/etc/nginx/lua/plugins

 local ngx = ngx local _M = {} function _M.rewrite() if ngx.var.http_cf_connecting_ip then ngx.log(ngx.ERR, "Changing x-forwarded-port to 443") ngx.var.pass_port = 443 end end return _M

更改變量的條件可以檢查任何其他標頭(例如限制對特定主機的更改)使用 configmap 可以將插件掛載為文件https://github.com/kubernetes/ingress-nginx/blob/ master/charts/ingress-nginx/values.yaml#L396-L404

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM