You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在K8s 1.27.3的GKE GCE Ingress中实现www到非www重定向

Kubernetes 1.27.3 实现 www.example.com 到 example.com 的重定向(Sidecar 方案)

核心思路

在业务Pod中添加Nginx Sidecar容器,由Nginx处理域名重定向逻辑:拦截www.example.com的请求返回301永久重定向到example.com,同时完整保留原请求的路径、参数等信息;对example.com的请求直接转发到同Pod内的业务容器。

步骤1:编写Nginx重定向配置

创建nginx-redirect.conf配置文件,内容如下:

server {
    listen 80;
    server_name www.example.com;

    # 301永久重定向,保留原请求的路径与参数
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 80;
    server_name example.com;

    # 转发请求到同Pod内的业务容器(假设业务容器监听8080端口)
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

步骤2:将配置存入ConfigMap

通过YAML文件创建ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-redirect-config
data:
  nginx-redirect.conf: |
    server {
        listen 80;
        server_name www.example.com;
        return 301 $scheme://example.com$request_uri;
    }

    server {
        listen 80;
        server_name example.com;
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

执行命令应用:kubectl apply -f configmap.yaml

步骤3:修改Deployment添加Sidecar容器

在原有业务Deployment中加入Nginx Sidecar容器,挂载ConfigMap配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
        # 原有业务容器
        - name: your-app
          image: your-app-image:tag
          ports:
            - containerPort: 8080
          # 业务容器其他配置:资源限制、环境变量等

        # Nginx Sidecar容器
        - name: nginx-redirect
          image: nginx:alpine
          ports:
            - containerPort: 80
          volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/conf.d/nginx-redirect.conf
              subPath: nginx-redirect.conf
          # 可选:添加资源限制
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "200m"
              memory: "256Mi"
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-redirect-config

执行命令更新Deployment:kubectl apply -f deployment.yaml

步骤4:配置Service和Ingress

Service配置

让Service指向Sidecar容器的80端口:

apiVersion: v1
kind: Service
metadata:
  name: your-app-service
spec:
  selector:
    app: your-app
  ports:
    - name: http
      port: 80
      targetPort: 80 # 映射到Sidecar的80端口
  type: ClusterIP

Ingress配置

将两个域名都指向上述Service:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-app-ingress
  annotations:
    # 根据使用的Ingress控制器添加对应注解(如GCE/ALB的配置注解)
spec:
  rules:
    - host: www.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: your-app-service
                port:
                  number: 80
    - host: example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: your-app-service
                port:
                  number: 80

执行命令应用Ingress:kubectl apply -f ingress.yaml

验证重定向效果

用curl测试:

# 测试www域名重定向
curl -I http://www.example.com/test/path?key=value
# 应返回301状态码,Location字段为http://example.com/test/path?key=value

# 测试非www域名直接访问
curl -I http://example.com/test/path?key=value
# 应返回业务应用的200状态码

内容的提问来源于stack exchange,提问作者Swapnil91color

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:16:13