gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:43:27 24 4
gpt4 key购买 nike

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

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

我尝试了各种重写规则,但无济于事。我什至从 Docker-for-Mac 切换到 Minikube,但结果是一样的。

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

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
backend:
serviceName: backend
servicePort: 8080

但是这个入口不会:
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 调用的不同服务的不同路径?

最佳答案

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

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

关于nginx - Kubernetes NGINX Ingress 将 HTTP 请求从 POST 更改为 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56177198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com