angular - 具有入口的 Kubernetes 上 Angular 应用程序的重定向问题
问题描述
我有 Kubernetes 的入口设置,如下所示
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: dev-ingress
#namespace: dev
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
ingress.gcp.kubernetes.io/pre-shared-cert: "self-signed"
kubernetes.io/ingress.class: "nginx"
kubernetes.io/ingress.allow-http: "true"
spec:
rules:
- host: my.host.com
http:
paths:
- backend:
serviceName: webui-svc
servicePort: 80
path: /webui(/|$)(.*)
我正在 webui-svc 下运行 Angular 应用程序部署。Angular 应用程序使用 docker 进行容器化,我在 docker 容器中包含了 Nginx 配置,如下所示
# Expires map
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/json max;
application/javascript max;
~image/ max;
}
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
expires $expires;
gzip on;
}
当我请求http://my.host.com/webui/时,内部调用会被重定向,而没有为其添加前缀的 webui,例如
当我请求http://my.host.com/webui/时,有几个调用来获取 main.js、vendor.js 等,这些都是通过http://my.host.com/runtime.js请求的 所以它失败了,如果它会像http://my.host.com/webui/runtime.js那样被重定向,它会成功
角度应用程序中是否有配置或我缺少的入口。非常感谢任何帮助,在此先感谢
解决方案
您的重写目标正在剥离/webui/
. 考虑你的路径:
path: /webui(/|$)(.*)
现在检查rewrite-target
:
nginx.ingress.kubernetes.io/rewrite-target: /$2
.
如果您删除此注释(并且您可以删除该use-regex
注释,因为现在不需要它),它会将/webui/
路径传递到您的后端。
推荐阅读
- swift - 互斥锁失败:来自自动释放池的无效参数
- javascript - 错误的 HTTPS 证书:Webworker 中的“TypeError:无法在 'WebAssembly' 上执行 'compile':HTTP 状态代码不正常”
- python - 如何遍历不存在的字符?Python
- python - 在 Python 中打开浏览器
- homebrew - 没有可用的配方或名称为“portaudio”的木桶
- json - 通过将嵌套对象添加到 Apache Nifi 中的单列将嵌套 JSON 转换为 CSV
- javascript - 如何使用 javascript 中的每个循环获取当前索引并更新到实时数据库
- java - 特定坐标的点击地图标记上的Android ListView
- javascript - 我正在使用 react-multi-select-component,它工作正常,现在我想添加一个额外的按钮,删除输入框中的每个选定元素
- gdscript - 3.0 中 2.0 版的 get_global_pos 的等价物是什么?