另一个 nginx 入口重写目标问题
Another nginx ingress rewrite-target problem
我有一个服务和一个带有 kubenetes nginx 入口控制器的入口资源。我希望 url 的 /student
路径转到应用程序的根目录并匹配 student
之后的任何其他 url 段。
例如:http://example.com/student/ver 应该匹配我应用程序的 /ver
路由。
但是,我的入口总是命中带有 /student
url 路径前缀其他 url 段的应用程序。如果我调用 http://example.com/student/ver,我的应用程序会被相同的 url (student/ver
).
击中
我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: ingress-resource
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: lesson-streaming
servicePort: 80
path: /student
我花了好几天时间,一次都没有成功。
编辑:
入口改成下面的-不是我的要求说http 404
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: ingress-resource
namespace: default
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: lesson-streaming
servicePort: 80
path: /student(/|$)(.*)
您可以按照link正确使用rewrite-target
注解并保持正确的键值nginx.ingress.kubernetes.io/rewrite-target
。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: rewrite
namespace: default
spec:
rules:
- host: rewrite.bar.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /something(/|$)(.*)
我已经多次尝试在 nginx 入口控制器中正确执行基于路径的路由,但我发现基于路径的路由不起作用的主要原因。
将 (nginx.ingress.kubernetes.io/rewrite-target: /)
替换为 (nginx.org/rewrites: "serviceName=servicename rewrite=/")
必须在spec
中添加ingressClassName
以我为例
我有 kubernetes 1.23.0 & nginx/1.21.6
希望这能解决上述问题。
祝你好运
我有一个服务和一个带有 kubenetes nginx 入口控制器的入口资源。我希望 url 的 /student
路径转到应用程序的根目录并匹配 student
之后的任何其他 url 段。
例如:http://example.com/student/ver 应该匹配我应用程序的 /ver
路由。
但是,我的入口总是命中带有 /student
url 路径前缀其他 url 段的应用程序。如果我调用 http://example.com/student/ver,我的应用程序会被相同的 url (student/ver
).
我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: ingress-resource
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: lesson-streaming
servicePort: 80
path: /student
我花了好几天时间,一次都没有成功。
编辑:
入口改成下面的-不是我的要求说http 404
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: ingress-resource
namespace: default
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: lesson-streaming
servicePort: 80
path: /student(/|$)(.*)
您可以按照link正确使用rewrite-target
注解并保持正确的键值nginx.ingress.kubernetes.io/rewrite-target
。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: rewrite
namespace: default
spec:
rules:
- host: rewrite.bar.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /something(/|$)(.*)
我已经多次尝试在 nginx 入口控制器中正确执行基于路径的路由,但我发现基于路径的路由不起作用的主要原因。
将 (nginx.ingress.kubernetes.io/rewrite-target: /)
替换为 (nginx.org/rewrites: "serviceName=servicename rewrite=/")
必须在spec
ingressClassName
以我为例 我有 kubernetes 1.23.0 & nginx/1.21.6
希望这能解决上述问题。 祝你好运