kubernetes-ingress - 在 Kubernetes NGINX 入口控制器后面使用相对 URL 托管 webapp
问题描述
我在 NGINX入口控制器后面的 Kubernetes 1.13 集群中托管一个 Web 应用程序。Ingress
指定path: /my-webapp/?(.*)
和这样annotations:
{ nginx.ingress.kubernetes.io/rewrite-target: /$1 }
可以从集群外部访问 webapp http://my-cluster/my-webapp
。(入口控制器公开为my-cluster
。)
剩下的一个问题是 webapp 包含引用例如 CGI 脚本和 CSS 样式表的“相对”URL。例如,<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
,这确实是错误的,需要修复。
更新 这看起来像是一个与 NGINX 反向代理相关的问题,而不是特别是 Kubernetes NGINX 入口控制器。我想知道建议的食谱是否以及如何在这种特殊情况下也可以使用。首先,我尝试切换到引用样式表的相对 URL(根据已接受答案中的配方 One),但这到目前为止还没有奏效:
<link rel="stylesheet" type="text/css" href="my-stylesheet.css" />
,浏览器显然仍然试图从 获取样式表http://my-cluster/my-stylesheet.css
,尽管它显示http://my-cluster/my-webapp
在 URL 栏中,检查器报告的 URL 与baseURI
.
解决方案
Now this combination of annotations seems to do the trick:
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"
I am currently using this version of the ingress controller:
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: 0.23.0
Build: git-be1329b22
Repository: https://github.com/kubernetes/ingress-nginx
-------------------------------------------------------------------------------
推荐阅读
- macos - Homebrew:预下载公式的文件
- html - 引导复选框按钮错误
- javascript - React 更新 Array 内部的 State Array
- swift - 如何删除 iOS14 上出现的新列表填充
- c# - 创建 CoreCLR 失败,HRESULT: 0x80070057
- swift - WKWebView 在 Swift 中抛出 HTTP ERROR 401-Authorization Failed in Cocoa(Mac application)
- jquery - DataTables 无法显示 Ajax 数据
- react-native - @react-navigation/drawer 与 react-navigation-drawer
- c# - Untiy2D Tilemap有缝隙吗?
- html - bootstrap justify-content-between 在标头中不起作用