我有一个 nginx kubernetes pod/ingress 托管一个网站example.com
,目前它是一个相对无样式的主页。我还有一些其他路径需要保留(即:example.com/.well-known/assetlinks.json
由移动应用程序用来验证应用程序链接...该文件需要保持在那里可用(不可能在重定向域中托管该文件)。我希望任何其他请求,特别是example.com
重定向到different.site.com
。
我有一个 html 重定向正在运行,但由于重定向的延迟,它并不理想。
我使用 k8s 注释进行了永久重定向
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^/ https://different.site.com permanent;
通常这种方法是可行的,但是对 assetlinks 文件的任何请求都会被重定向,从而破坏应用程序链接。
我一直在使用 Ingress 规则,将pathType
值从 Prefix 更改为 Exact,看看是否能得到想要的结果,但到目前为止还没有运气。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: applinks-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^/ https://different.site.com permanent;
spec:
ingressClassName: nginx
tls:
- hosts:
- example.com
secretName: applinks-tls
rules:
- host: example.com
http:
paths:
- pathType: Exact
path: /
backend:
service:
name: applinks-service
port:
number: 80
- pathType: Exact
path: /.well-known/assetlinks.json
backend:
service:
name: applinks-service
port:
number: 80
如果有人知道该怎么做,我将不胜感激。
答案1
我会location
为此使用一个块。但是,我不清楚如何将此 YML 配置转换为 nginx 配置。
在 nginx 配置中,该块如下所示:
location = / {
return 301 https://different.example.com;
}
如果你无法实现该location
块,那么你可以使用这个重写:
rewrite ^/$ https://different.example.com permanent;
^
表示匹配字符串的开头,而$
表示匹配字符串的结尾。总的来说,这意味着只有/
位置符合正则表达式的匹配。