我正在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。
现在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
-------------------------------------------------------------------------------