在GCP/GKE上将apex域名(www)301重定向至非apex主域名
解决GCP原生Ingress的www到非www 301重定向问题
针对GCP原生Ingress(gce类型),无法像Nginx Ingress那样用注解快速配置重定向,你可以通过以下几种方案实现www.domain.com到domain.com的301永久重定向,解决SEO内容重复问题:
方案1:通过URL Map配置全局重定向规则
GCP原生Ingress的流量路由依赖URL Map,你可以直接在URL Map中定义重定向规则:
创建包含重定向规则的URL Map
使用Kubernetes CRD创建URL Map,匹配www.domain.com的所有请求并跳转:apiVersion: compute.cnrm.cloud.google.com/v1beta1 kind: ComputeURLMap metadata: name: domain-redirect-urlmap spec: defaultService: external: projects/[你的GCP项目ID]/global/backendServices/[你的主服务Backend Service名称] hostRules: - hosts: ["www.domain.com"] pathMatcher: www-to-root-redirect pathMatchers: - name: www-to-root-redirect defaultRedirect: hostRedirect: domain.com redirectResponseCode: MOVED_PERMANENTLY_301 stripQuery: false # 保留原请求的查询参数将URL Map关联到Ingress
在你的Ingress资源中指定使用该URL Map,也可通过GCP控制台手动绑定到Ingress对应的负载均衡器:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: main-app-ingress annotations: kubernetes.io/ingress.class: "gce" spec: tls: - hosts: ["domain.com", "www.domain.com"] secretName: domain-tls-secret # 确保证书包含两个域名 rules: - host: domain.com http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: your-main-app-service port: {number: 80} - host: www.domain.com http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: your-main-app-service port: {number: 80}
方案2:使用Backend Config配置服务级重定向
创建专门的Backend Config定义重定向策略,关联到处理www域名的Service:
创建重定向Backend Config
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: www-redirect-config spec: redirect: hostRedirect: domain.com redirectResponseCode: MOVED_PERMANENTLY_301 stripQuery: false关联到Service
在处理www请求的Service中添加注解绑定Backend Config:apiVersion: v1 kind: Service metadata: name: www-redirect-service annotations: cloud.google.com/backend-config: '{"default": "www-redirect-config"}' spec: type: NodePort selector: {app: your-main-app} ports: [{port: 80, targetPort: 80}]更新Ingress规则
在Ingress中为www.domain.com配置指向该Service的路由:# 补充到Ingress的spec.rules中 - host: www.domain.com http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: www-redirect-service port: {number: 80}
方案3:Cloud CDN重定向规则(适合已启用CDN的场景)
如果你的应用已经配置了Cloud CDN,可以直接在负载均衡器的CDN规则中添加重定向:
- 进入GCP控制台的负载均衡器页面,找到对应Ingress的负载均衡器
- 切换到规则标签,点击添加规则
- 设置匹配条件为
主机等于 www.domain.com,动作选择重定向到URL,填入https://domain.com${request_uri},响应码选择301 永久移动 - 保存规则后,CDN会自动处理所有匹配请求的跳转
内容的提问来源于stack exchange,提问作者Elazar
相关产品推荐
相关产品推荐

