Kubernetes Nginx Ingress实现旧站分路径重定向至新站的配置问询
解决方案
方式一:修改现有configuration-snippet配置
直接在原配置里添加根路径的判断逻辑,替换单一重定向规则:
nginx.ingress.kubernetes.io/configuration-snippet: | if ($host = "old.mysite.com" and $request_uri = "/") { return 301 https://new.mysite.com/homepage; } if ($host = "old.mysite.com" and $request_uri != "/") { return 301 https://new.mysite.com$request_uri; }
逻辑说明:
- 第一个判断专门匹配旧站点的根路径请求,直接重定向到新站点的
/homepage - 第二个判断覆盖旧站点所有非根路径请求,保持原有路径结构重定向到新站点
方式二:使用独立Ingress资源(推荐)
为了规避Nginx if 指令的潜在兼容性问题,更贴合Kubernetes Ingress的最佳实践,可以拆分两个Ingress规则分别处理:
处理根路径重定向的Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: old-site-root-redirect annotations: nginx.ingress.kubernetes.io/permanent-redirect: "https://new.mysite.com/homepage" spec: rules: - host: old.mysite.com http: paths: - path: / pathType: Exact backend: service: name: dummy-service # 只需集群中存在的服务,无需实际提供业务响应 port: number: 80
处理子路径重定向的Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: old-site-subpath-redirect annotations: nginx.ingress.kubernetes.io/permanent-redirect: "https://new.mysite.com$request_uri" spec: rules: - host: old.mysite.com http: paths: - path: /(.*) pathType: ImplementationSpecific backend: service: name: dummy-service port: number: 80
逻辑说明:
- 第一个Ingress用
Exact路径类型精确匹配根路径/,直接指向目标重定向地址 - 第二个Ingress用正则路径
/(.*)匹配所有非根路径,通过$request_uri保留原路径结构完成重定向 - 注意:
dummy-service需要是集群中已存在的服务(可以是一个无业务逻辑的空服务),因为Ingress必须关联后端服务
内容的提问来源于stack exchange,提问作者Tharindu Weerasinghe
相关产品推荐
相关产品推荐

