首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes NGINX Ingress将HTTP请求从POST更改为GET

Kubernetes NGINX Ingress将HTTP请求从POST更改为GET
EN

Stack Overflow用户
提问于 2019-05-17 06:08:39
回答 1查看 2.8K关注 0票数 4

我正在使用与Docker-for-Mac捆绑在一起的Kubernetes。我正在尝试配置一个Ingress,它将以/v1/开头的http请求路由到我的后端服务,并将/ui/请求路由到我的Angular应用程序。

我的问题似乎是请求的HTTP方法被入口(NGINX)从POST更改为GET。

我尝试了各种重写规则,但都没有用。我甚至从Docker-for-Mac切换到了Minikube,但结果是一样的。

如果我使用一个没有路径的简单入口(只有默认的后端),那么服务将获得正确的HTTP方法。下面的入口有效:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  backend:
    serviceName: backend
    servicePort: 8080

但是这个入口没有:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"

spec:
  rules:
  - http:
      paths:
      - path: /v1
        backend:
          serviceName: backend
          servicePort: 8080
      - path: /ui
        backend:
          serviceName: webui
          servicePort: 80

当我调试“后端”服务时,我发现HTTP请求是GET而不是POST。

我在某处读到NGINX重写发出308 (永久)重定向,HTTP方法从GET更改为POST,但如果是这种情况,我如何配置我的入口来支持需要POST调用的不同服务的不同路径?

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 02:58:38

我找到了我的问题的解决方案。当我将host:添加到配置中时,http方法没有改变。这是我当前的入口yaml (重写和正则表达式用于省略将/v1作为后端URL的一部分发送)

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: localhost
    http:
      paths:
      - path: /v1(/|$)(.*)
        backend:
          serviceName: gateway
          servicePort: 8080
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56177198

复制
相关文章

相似问题

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