nginx ingress rewrite-target 重定向问题
nginx ingress rewrite-target problem with redirection
我有一个 Kibana 仪表板,我目前可以通过主机的根访问它:https://my.host.com/
。我想更改它以便可以通过路径 https://my.host.com/kibana/
访问它。为此,我使用了 main documentation:
中提供的 rewrite-target
注释
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: kibana-ing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
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/
时发生的情况:
如您在 Location header 中所见,这会发回 HTTP 302 并重定向到 app/login
。但是当我的浏览器要求 Nginx 返回获取这个 app/login 时,它理所当然地给出了 404,因为它不知道这条路径。
有没有办法(可能通过 Ingress 注释)将 '/kibana' 前缀附加到所有要返回的 Location header?
编辑2:
我设法通过添加以下 2 个注释将 /kibana/
部分附加到 Location header 中:
nginx.ingress.kubernetes.io/proxy-redirect-from: "/"
nginx.ingress.kubernetes.io/proxy-redirect-to: "/kibana/"
这使得重定向指向 kibana/app/login
,导致 200 状态。然而,更多 objects 正在像 bootsrap.js 一样被页面加载,它们的位置被硬编码在 html 页面中,像这样发回:
</script><script src="/bootstrap.js"></script></body></html>
显然这会在我的浏览器端返回另一个 404 错误...我想我将不得不在应用程序端处理这个问题。
我设法在应用程序级别解决了这个问题。在我的 kibana.yml
配置文件中,我必须告诉 Kibana 它在反向代理后面 运行。所以我设置了server.basePath: /kibana
.
请注意,我上面为 Ingress 所做的配置仍然需要,因为应用程序仍然可以在服务器的根目录下访问,但只有响应 URL 将包含 /kibana/
前缀。
我有一个 Kibana 仪表板,我目前可以通过主机的根访问它:https://my.host.com/
。我想更改它以便可以通过路径 https://my.host.com/kibana/
访问它。为此,我使用了 main documentation:
rewrite-target
注释
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: kibana-ing
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
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/
时发生的情况:
如您在 Location header 中所见,这会发回 HTTP 302 并重定向到 app/login
。但是当我的浏览器要求 Nginx 返回获取这个 app/login 时,它理所当然地给出了 404,因为它不知道这条路径。
有没有办法(可能通过 Ingress 注释)将 '/kibana' 前缀附加到所有要返回的 Location header?
编辑2:
我设法通过添加以下 2 个注释将 /kibana/
部分附加到 Location header 中:
nginx.ingress.kubernetes.io/proxy-redirect-from: "/"
nginx.ingress.kubernetes.io/proxy-redirect-to: "/kibana/"
这使得重定向指向 kibana/app/login
,导致 200 状态。然而,更多 objects 正在像 bootsrap.js 一样被页面加载,它们的位置被硬编码在 html 页面中,像这样发回:
</script><script src="/bootstrap.js"></script></body></html>
显然这会在我的浏览器端返回另一个 404 错误...我想我将不得不在应用程序端处理这个问题。
我设法在应用程序级别解决了这个问题。在我的 kibana.yml
配置文件中,我必须告诉 Kibana 它在反向代理后面 运行。所以我设置了server.basePath: /kibana
.
请注意,我上面为 Ingress 所做的配置仍然需要,因为应用程序仍然可以在服务器的根目录下访问,但只有响应 URL 将包含 /kibana/
前缀。