首页 > 解决方案 > Kubernetes Nginx Ingress 处理 JavaScript 重定向

问题描述

这就是我的入口定义的样子:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    ingress.kubernetes.io/ssl-redirect: "false"
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /myapp(/|$)(.*)
        backend:
          serviceName: myapp
          servicePort: 8080

当我应用这个时,我得到了一个工作入口。我可以提出以下请求:

http://kubernetes.docker.internal/myapp

我的应用程序的响应是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>
    <meta http-equiv="refresh" content="0; url=/auth/" />
    <meta name="robots" content="noindex, nofollow">
    <script type="text/javascript">
        window.location.href = "/auth/"
    </script>
</head>

<body>
    If you are not redirected automatically, follow this <a href='/auth'>link</a>.
</body>

</html>

猜猜看……用户被重定向到:

http://kubernetes.docker.internal/auth/

这会引发 404 错误。我实际上需要被重定向到:

http://kubernetes.docker.internal/myapp/auth/

换句话说,我需要代理myapp并在每个 URL 中都有/myapp前缀。

标签: javascriptkuberneteskubernetes-ingressnginx-ingress

解决方案


推荐阅读