使用Kubernetes NGINX入口控制器后面的相对URL托管webapp

问题描述 投票:2回答:1

我正在NGINX ingress controller背后的Kubernetes 1.13集群中托管一个Web应用程序。 Ingress指定path: /my-webapp/?(.*)annotations: { nginx.ingress.kubernetes.io/rewrite-target: /$1 },以便可以从http://my-cluster/my-webapp群集外部访问webapp。 (入口控制器暴露为my-cluster。)

剩下的一个问题是webapp包含引用的“相对”URL。到CGI脚本和CSS样式表。例如,<link rel="stylesheet" type="text/css" href="/my-stylesheet.css" />中的样式表目前无法加载。我认为这是因为浏览器在错误的URL上请求它(http://my-cluster/my-webapp/my-stylesheet.css是正确的)并且需要更多注释。

这种情况的正确配置是什么?

更新检查员显示浏览器当前从URL http://my-cluster/my-stylesheet.css请求样式表,这确实是错误的并且需要修复。

更新This看起来像一个NGINX反向代理的相关问题,特别是Kubernetes NGINX入口控制器。我想知道建议的食谱是否以及如何在这种特殊情况下也能起作用。首先,我尝试切换到引用样式表的相对URL(在接受的答案中按照食谱One),但到目前为止还没有工作:<link rel="stylesheet" type="text/css" href="my-stylesheet.css" />,浏览器显然仍然试图从http://my-cluster/my-stylesheet.css获取样式表,尽管它在URL栏中显示http://my-cluster/my-webapp,检查器报告与baseURI相同的URL。

kubernetes-ingress nginx-reverse-proxy
1个回答
1
投票

现在this注释组合似乎可以做到这一点:

annotations:
  nginx.ingress.kubernetes.io/configuration-snippet: |
    proxy_set_header Accept-Encoding "";
    sub_filter '<head>' '<head> <base href="/my-webapp/">';
  nginx.ingress.kubernetes.io/rewrite-target: /$1
  nginx.ingress.kubernetes.io/use-regex: "true"

我目前正在使用入口控制器的version

-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.23.0
  Build:      git-be1329b22
  Repository: https://github.com/kubernetes/ingress-nginx
-------------------------------------------------------------------------------
© www.soinside.com 2019 - 2024. All rights reserved.