在不更改浏览器的情况下重写 Kubernetes ingress-nginx url
Kubernetes ingress-nginx rewrite without changing browser url
我们想在site.abc.com中加载example.xyz.com。最好的办法是redirect/rewrite所有从site.abc.com到example.xyz.com的请求。但是,我们不希望浏览器 URL 被更改。 From this similar SO problem 我们知道我们需要一个如下所示的 Nginx 位置配置
server {
servername site.abc.com;
listen 80;
....
....
....
....
location / {
proxy_pass http://example.xyz.com;
rewrite /(.*)$ / break;
}
}
但是,我不确定如何在 Kubernetes ingress-nginx 中创建类似的规则,因为它会为每个规则添加 proxy_pass,这会阻止我们在 [=] 中添加 proxy_pass 配置13=]注释.
还在入口提供nginx.ingress.kubernetes.io/rewrite-target: http://example.xyz.com/
注解如下,重定向到example.xyz.com而不是加载example.xyz.com 在 site.abc.com.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: http://example.xyz.com/
name: url-rewrite
namespace: default
spec:
rules:
- host: site.abc.com
http:
paths:
- backend:
service:
name: service
port:
number: 80
path: /(.*)
pathType: ImplementationSpecific
我们如何在 site.abc.com 中加载 example.xyz.com 而无需在浏览器中进行任何更改 URL在这种情况下使用 ingress-nginx?
有了 this solution as a reference, pointed out by @WytrzymałyWiktor,我能够进行更改并且成功了。
这是更新后的入口文件。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
location ~ "^/(.*)" {
proxy_pass http://example.xyz.com;
rewrite /(.*)$ / break;
}
name: url-rewrite
namespace: default
spec:
rules:
- host: site.abc.com
这里有一个问题是使 SSL 重定向起作用。在某些情况下,目标(http://example.xyz.com) will return 302 /some/other/path
in such cases http://site.abc.com gets redirected as http://site.abc.com/some/other/path. Not sure how to make it to redirect as https://site.abc.com/some/other/path。
设置 nginx.ingress.kubernetes.io/ssl-redirect: "true"
和 nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
似乎不起作用。
将此添加为文档的答案,因为它会对遇到类似问题的人有所帮助。不可能重复,因为引用的解决方案解决了添加 proxy_pass
的问题,而这解决了 URL 在不更改浏览器 URL.
的情况下重写的问题
我们想在site.abc.com中加载example.xyz.com。最好的办法是redirect/rewrite所有从site.abc.com到example.xyz.com的请求。但是,我们不希望浏览器 URL 被更改。 From this similar SO problem 我们知道我们需要一个如下所示的 Nginx 位置配置
server {
servername site.abc.com;
listen 80;
....
....
....
....
location / {
proxy_pass http://example.xyz.com;
rewrite /(.*)$ / break;
}
}
但是,我不确定如何在 Kubernetes ingress-nginx 中创建类似的规则,因为它会为每个规则添加 proxy_pass,这会阻止我们在 [=] 中添加 proxy_pass 配置13=]注释.
还在入口提供nginx.ingress.kubernetes.io/rewrite-target: http://example.xyz.com/
注解如下,重定向到example.xyz.com而不是加载example.xyz.com 在 site.abc.com.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: http://example.xyz.com/
name: url-rewrite
namespace: default
spec:
rules:
- host: site.abc.com
http:
paths:
- backend:
service:
name: service
port:
number: 80
path: /(.*)
pathType: ImplementationSpecific
我们如何在 site.abc.com 中加载 example.xyz.com 而无需在浏览器中进行任何更改 URL在这种情况下使用 ingress-nginx?
有了 this solution as a reference, pointed out by @WytrzymałyWiktor,我能够进行更改并且成功了。 这是更新后的入口文件。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
location ~ "^/(.*)" {
proxy_pass http://example.xyz.com;
rewrite /(.*)$ / break;
}
name: url-rewrite
namespace: default
spec:
rules:
- host: site.abc.com
这里有一个问题是使 SSL 重定向起作用。在某些情况下,目标(http://example.xyz.com) will return 302 /some/other/path
in such cases http://site.abc.com gets redirected as http://site.abc.com/some/other/path. Not sure how to make it to redirect as https://site.abc.com/some/other/path。
设置 nginx.ingress.kubernetes.io/ssl-redirect: "true"
和 nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
似乎不起作用。
将此添加为文档的答案,因为它会对遇到类似问题的人有所帮助。不可能重复,因为引用的解决方案解决了添加 proxy_pass
的问题,而这解决了 URL 在不更改浏览器 URL.