如何正确配置 k8s nginx 入口基 url 替换来处理 Angular 客户端路由(LocationStrateg



我们有基于Angular的Web应用程序托管在Kubernetes集群上。此应用程序的入口配置为添加基本 URL:

{
  "kind": "Ingress",
  "apiVersion": "extensions/v1beta1",
  "metadata": {
    "name": "test-app",
    "namespace": "acceptance-testing",
    ...
    "annotations": {    
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/add-base-url": "true",
      "nginx.ingress.kubernetes.io/rewrite-target": "/",
      "nginx.ingress.kubernetes.io/ssl-redirect": "true"
    }
  },
  "spec": {
    "rules": [
      {
        "http": {
          "paths": [
            {
              "path": "/at/test-app",
              "backend": {
                "serviceName": "test-app",
                "servicePort": 80
              }
            }
          ]
        }
      }
    ]
  },
  ...
}

当我们在浏览器中输入包含客户端路由部分的 URL 时,入口会将整个 URL 添加为基础,这在我们的场景中是不正确的。

例如 https://server/at/test-app/some-page 请求基URL应该是 https://server/at/test-app/,但我们收到 https://server/at/test-app/some-page/

我们已经切换到 Angular 哈希路由位置策略,现在它可以正常工作,但我们想知道是否有某种方法可以使位置路由策略与 nginx 入口一起使用?

提前感谢您的帮助。

此致敬意

这里有一些概念:

  1. /at/test-app/some-page/必须路由到/at/test-app,这将有一个 Angular 应用程序,然后 Angular 将处理/some-page/
  2. 非角度路径(例如:.js、.css等(不要重写它
  3. 我不知道为什么"nginx.ingress.kubernetes.io/rewrite-target": "/at/test-app"在我的环境中看起来不起作用(gke 1.11.6-gke.2,入口:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.22.0(
{
    ...
    "annotations": {    
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/add-base-url": "true",
      "nginx.ingress.kubernetes.io/configuration-snippet": |   <-- change to this
        rewrite /at/test-app/([^.]+)$ /at/test-app break;      <--   rewrite path if no .
      "nginx.ingress.kubernetes.io/ssl-redirect": "true"
    }
    ....
}

相关内容

  • 没有找到相关文章

最新更新