kubernetes nginx ingress rewrite-target not work

Viewed 969

I am following rewrite-target guide from https://kubernetes.github.io/ingress-nginx/examples/rewrite/. But it doesn't work as I expected

Here is my ingress.

kind: Ingress
metadata:
  name: ingress-resource
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
spec:
  rules:
    - host: "test.gamedrive.cc"
      http:
        paths:
          - path: /player-gateway(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: player-gateway
                port:
                  number: 80

If make a request to /player-gateway/health/startup it should rewritten to /health/startup.

But rewritten data from Nginx is data: "/" and got 404 error code. Here is the log from Nginx

2021/11/07 06:58:03 [notice] 312#312: 26100 "(?i)/player-gateway(/|$)(.)" matches "/player-gateway/health/startup", client: 113.53.150.16, server: test.gamedrive.cc, request: "GET /player-gateway/health/startup HTTP/1.1", host: "test.gamedrive.cc" 2021/11/07 06:58:03 [notice] 312#312: *26100 rewritten data: "/", args: "", client: 113.53.150.16, server: test.gamedrive.cc, request: "GET /player-gateway/health/startup HTTP/1.1", host: "test.gamedrive.cc" 113.53.150.16 - - [07/Nov/2021:06:58:03 +0000] "GET /player-gateway/health/startup HTTP/1.1" 404 139 "-" "PostmanRuntime/7.28.4" 258 0.001 [default-player-gateway-80] [] 10.244.0.109:80 139 0.000 404 e834c8338f2938ffc84db4e7e4053706

I try to debug by changed nginx.ingress.kubernetes.io/rewrite-target: /$2 to nginx.ingress.kubernetes.io/rewrite-target: /health/startup.

and the response code is 200 as expected

2021/11/07 07:04:32 [notice] 452#452: 29805 "(?i)/player-gateway(/|$)(.)" matches "/player-gateway/health/startup", client: 113.53.150.16, server: test.gamedrive.cc, request: "GET /player-gateway/health/startup HTTP/1.1", host: "test.gamedrive.cc" 2021/11/07 07:04:32 [notice] 452#452: *29805 rewritten data: "/health/startup", args: "", client: 113.53.150.16, server: test.gamedrive.cc, request: "GET /player-gateway/health/startup HTTP/1.1", host: "test.gamedrive.cc" 113.53.150.16 - - [07/Nov/2021:07:04:32 +0000] "GET /player-gateway/health/startup HTTP/1.1" 200 2 "-" "PostmanRuntime/7.28.4" 258 0.002 [default-player-gateway-80] [] 10.244.0.109:80 2 0.000 200 66967d6ab87d542f3269860107a4b7c4

Seem like /$2 or (/|$)(.*) is not working.

Please help me solve this problem. Thanks.

0 Answers
Related