kubernetes - nginx ingress rewrite-target 重定向问题
问题描述
我有一个 Kibana 仪表板,我目前通过主机的根目录访问它:https://my.host.com/
。我想更改它,以便我可以通过路径访问它https://my.host.com/kibana/
。为此,我使用了主文档rewrite-target
中提供的注释:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: kibana-ing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
kubernetes.io/ingress.class: kibana-ingress-class
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: my.host.com
http:
paths:
- path: /kibana(/|$)(.*)
backend:
serviceName: kibana-svc
servicePort: 5601
我认为这在某种程度上有效,因为当点击https://my.host.com/kibana/时,我会被重定向到登录页面。但是登录页面返回到我的浏览器时没有 kibana 前缀 :https://my.host.com/app/login
并且我得到 404。
我怎样才能解决这个问题?
编辑:
这就是我点击时正在发生的事情https://my.host.com/kibana/
:
app/login
正如您在Location标头中看到的那样,这将返回一个带有重定向的 HTTP 302 。但是当我的浏览器要求 Nginx 获取这个应用程序/登录名时,它正确地给出了 404,因为它不知道这个路径。
有没有办法(可能通过 Ingress 注释)将“/kibana”前缀附加到所有返回的Location标头?
编辑2:
我设法通过添加以下 2 个注释将/kibana/
部分附加到Location标头中:
nginx.ingress.kubernetes.io/proxy-redirect-from: "/"
nginx.ingress.kubernetes.io/proxy-redirect-to: "/kibana/"
这使得重定向指向kibana/app/login
,导致 200 状态。然而,页面正在加载更多对象,例如 bootsrap.js,并且它们的位置在 html 页面中被硬编码,如下所示:
</script><script src="/bootstrap.js"></script></body></html>
显然,这会在我的浏览器端出现另一个 404 错误......我想我将不得不在应用程序端处理这个问题。
解决方案
我设法在应用程序级别解决了这个问题。在我的kibana.yml
配置文件中,我必须告诉 Kibana 它在反向代理后面运行。所以我设置server.basePath: /kibana
.
请注意,我在上面为 Ingress 所做的配置仍然需要,因为应用程序仍然可以在服务器的根目录中访问,但只有响应 URL 将包含/kibana/
前缀。
推荐阅读
- sql - 在 oracle 中对列进行分组
- amazon-web-services - ELB 在 EC2 上使用 Nginx 转移到 wordpress 显示 404
- java - 如何告诉休眠将调用哪个方法?我有一节课,两张桌子
- docker-compose - 无法从公司内部网外部访问站点时调试 Traefik
- powershell - Powershell Interop.Outlook 发送和接收特定邮箱并等待异步完成
- postgresql - 如何使用 PostgreSQL 高效地索引 JSONB 结构中的多个嵌套数字以进行高效的比较操作?(可选:SQLAlchemy)
- git - 如何将代码推送到远程代码存储库服务器?
- c# - 带有一个 dbContext + Messenger 的异步 UnitOfWork - 生成“在此上下文上启动的第二个操作....”异常
- nginx - 当第二个观众加入时直播停止
- ios - AVPlayer 层不适合播放器视图