angular - 相同角度应用的两个不同域和路径
问题描述
我已经在 Kubernetes 集群中设置了一个有角度的 docker 应用程序(使用 nginx 为其提供服务)。在 Kubernetes 中,我有一个入口控制器(来自 kubernetes 社区的那个),它将路由来自以下域的流量:
a) https://app.somedomain.com 和 b) https://saas-customer.somedomain.com/app
到同一个角度容器。这个想法是个人用户可以使用 a) 而公司用户/客户可以使用 b)。我为 a) 设置了以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: frontend-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- app.somedomain.io
secretName: tls-secret
rules:
- host: app.somedomain.io
http:
paths:
- backend:
serviceName: frontend-service
servicePort: 80
这对于 b)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: frontend-ingress-wild
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- somedomain.io
- '*.somedomain.io'
secretName: tls-secret
rules:
- host: '*.somedomain.io'
http:
paths:
- path: /app
backend:
serviceName: frontend-service
servicePort: 80
a) 按预期工作。对于 b),问题是 index.html 已提供服务,但它引用了来自“/”的资产。基本 href 设置为 / 角度。
src="polyfills.7037a817a5bb670ed2ca.js"
但我无法更改基本 href,因为在一种情况下它应该是“/”,而在另一种情况下应该是“/app”,但仍然应该从一个位置提供所有资产。我不知道我是否需要为 angular 添加特定的路由才能使其正常工作,或者尝试在 ingress/nginx 端摆弄以解决这个挑战。
解决方案
您想从“/”提供像 *.js 文件这样的资产吗?您可以在第二个入口中使用以下注释来执行此操作:
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^/app/(.*\.js)$ /$1 break;
这样,您的应用程序将从 /app 目录和您的 js 文件提供服务 - 从根目录如下:
/app/index.html -> /app/index.html
/app/index.js -> /index.js
这是你想要达到的目标吗?
推荐阅读
- python - 使用 Google Cloud Functions 时带有 scrapy 的 ReactorNotRestartable
- sql - 带有嵌入式表的 Like 运算符处的 SQL 通配符
- python - 如何在此代码中使用 Input() 函数更改文件名?此代码的任何正确形式
- javascript - 有没有办法使用字符串为对象的深层嵌套属性赋值?
- c# - 订阅方法执行c#
- java - GXT 如何在 XTemplate 中显示树对象?
- spring - 可以使用 Intellij Scratch 文件通过 JpaRepository 接口进行查询吗?
- jquery - 如何在不使用scrollY的情况下垂直修复数据表标题?
- r - 在 data.tables 中创建新列时如何使用向量化的 get() 函数?
- python - TypeError: "'int' object is not callable", '发生在索引 0'