You need to enable JavaScript to run this app.
导航
Nginx Ingress 配置重定向规则
最近更新时间:2024.06.05 20:37:49首次发布时间:2023.12.26 19:38:55

Nginx Ingress 支持重定向功能,包括永久重定向和临时重定向,也支持将 HTTP 重定向为 HTTPS。本文为您介绍如何配置 Nginx Ingress 重定向功能。

前提条件

配置永久重定向

Nginx Ingress 支持通过 Annotation 配置永久重定向,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  annotations:
    nginx.ingress.kubernetes.io/permanent-redirect: "https://www.volcengine.com" # 重定向到指定的目标网站
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
  - host: example.com # 转发规则域名
    http:
      paths:
      - backend:
          service:
            name: service-demo # 请求被转发到的目标服务名称
            port:
              number: 80 # 请求被转发到的目标服务开放端口号
        path: / # 访问路径
        pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配)

Annotation 说明如下表所示。

Key类型是否必须描述默认值
nginx.ingress.kubernetes.io/permanent-redirectString重定向的目标网站地址。

说明

默认情况下,永久重定向的返回状态码为301

配置永久重定向返回状态码

Nginx Ingress 支持通过 Annotation 配置永久重定向并指定返回状态码,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  annotations:
    nginx.ingress.kubernetes.io/permanent-redirect: "https://www.volcengine.com" # 重定向到指定的目标网站
    nginx.ingress.kubernetes.io/permanent-redirect-code: "308" # 重定向返回状态码
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
  - host: example.com # 转发规则域名
    http:
      paths:
      - backend:
          service:
            name: service-demo # 请求被转发到的目标服务名称
            port:
              number: 80 # 请求被转发到的目标服务开放端口号
        path: / # 访问路径
        pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配)

Annotation 说明如下表所示。

Key类型是否必须描述默认值
nginx.ingress.kubernetes.io/permanent-redirectString重定向到指定的网站。
nginx.ingress.kubernetes.io/permanent-redirect-codeString指定重定向返回状态码。取值:301308

配置临时重定向

Nginx Ingress 支持通过 Annotation 配置临时重定向,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  annotations:
    nginx.ingress.kubernetes.io/temporal-redirect: "https://www.volcengine.com" # 重定向到指定的目标网站
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
  - host: example.com # 转发规则域名
    http:
      paths:
      - backend:
          service:
            name: service-demo # 请求被转发到的目标服务名称
            port:
              number: 80 # 请求被转发到的目标服务开放端口号
        path: / # 访问路径
        pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配)

Annotation 说明如下表所示。

Key类型是否必须描述默认值
nginx.ingress.kubernetes.io/temporal-redirectString重定向到指定的网站。

配置 HTTP 重定向到 HTTPS

Nginx Ingress 支持通过 Annotation 配置 HTTP 重定向到 HTTPS,示例和说明如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress # 路由规则的名称
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true" # 开启 HTTP 重定向到 HTTPS
spec:
  ingressClassName: nginx # 指定 Ingress Controller
  rules:
  - host: example.com # 转发规则域名
    http:
      paths:
      - backend:
          service:
            name: service-demo # 请求被转发到的目标服务名称
            port:
              number: 80 # 请求被转发到的目标服务开放端口号
        path: / # 访问路径
        pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配)

Annotation 说明如下表所示。

Key类型是否必须描述默认值

nginx.ingress.kubernetes.io/ssl-redirect

Boolean

是否将 HTTP 请求重定向至 HTTPS。取值:

  • true:开启将 HTTP 请求重定向至 HTTPS。
  • false:关闭将 HTTP 请求重定向至 HTTPS。

结果验证

以永久重定向为例,使用以下命令访问服务。其中180.xxx.xxx.xxx为 Nginx Ingress 对应 CLB 的公网或私网 IP 地址。

curl -H "Host: example.com" http://180.xxx.xxx.xxx -I -k

预期输出如下,可以看到重定向信息。

HTTP/1.1 301 Moved Permanently
Date: Thu, 07 Dec 2023 06:56:48 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: https://www.volcengine.com