为外部 HTTP(S) 负载平衡器设置网址重写

此示例演示了如何重写请求中指定的路径。

准备工作

  • 了解网址重写

  • 请特别了解一般网址映射路径匹配器

  • 网址重写示例假定您已按照使用 Cloud Storage 存储分区设置负载平衡器中所述的步骤创建了外部 HTTP(S) 负载平衡器。

    该示例将引导您创建两个网址:

    • http://IP_ADDRESS/never-fetch/three-cats.jpg
    • http://IP_ADDRESS/love-to-fetch/two-dogs.jpg

    其中 /never-fetch/three-cats.jpg 存储在 /cats(默认服务)中,而 /love-to-fetch/two-dogs.jpg 存储在 /dogs 中。

    此时,网址映射如下所示:

    gcloud compute url-maps describe http-lb
    
    creationTimestamp: '2020-10-13T11:18:10.561-07:00'
    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
    fingerprint: MKfYsObzqgw=
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    id: '1420501688756228493'
    kind: compute#urlMap
    name: test-bucket
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
      name: path-matcher-1
      pathRules:
      - paths:
        - /love-to-fetch/*
        service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/http-lb
    

修改网址映射

在此示例中,您将重写 /love-to-fetch/ 网址,以便用户可以通过此简化网址访问 two-dogs.jpg 图片:

  • http://IP_ADDRESS/two-dogs.jpg

为此,请按如下所示修改负载平衡器的网址映射:

控制台

修改负载平衡器

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击 http-lb
  3. 点击修改
  4. 不关闭窗口继续操作。

更改主机和路径规则

  1. 在屏幕左侧列中,点击主机和路径规则
  2. 选择高级主机和路径规则(网址重定向、网址重写)
  3. 点击包含非默认路径规则的行,在本例中,以星号 (*) 表示所有主机的行。
  4. 点击 /love-to-fetch/* Route traffic to a single backend: dogs 行相应的铅笔图标
  5. 路径下,删除 /love-to-fetch/* 并添加 /*
  6. 操作下,选择将流量路由到单个后端
  7. 点击附加操作(网址重写)
  8. 主机重写留空。
  9. 路径前缀重写下,输入 /love-to-fetch/
  10. 后端下,选择 dogs
  11. 点击保存
  12. 点击完成。 新的主机和路径规则如下所示:

    路径 操作 后端
    任何不匹配的项(默认) 将流量路由到单个后端 cats
    /* 将流量路由到单个后端 dogs

  13. 如果看起来都正确,请点击更新以更新您的 HTTP 负载平衡器。

gcloud

  1. 创建一个 YAML 文件 /tmp/http-lb.yaml,并务必将 PROJECT_ID 替换为您的项目 ID。

    当用户请求路径 /* 时,路径会在后端中重写为内容的实际位置,即 /love-to-fetch/*

    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: http-lb
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
      name: path-matcher-1
      pathRules:
      - paths:
        - /*
        routeAction:
          urlRewrite:
            pathPrefixRewrite: /love-to-fetch/
        service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    tests:
    - description: Test routing to backend bucket, dogs
      host: example.com
      path: /love-to-fetch/test
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    
  2. 验证网址映射。

    gcloud compute url-maps validate --source /tmp/http-lb.yaml
    

    如果测试通过并且命令输出成功消息,请将更改保存到网址映射。

  3. 更新网址映射。

    gcloud compute url-maps import http-lb \
       --source /tmp/http-lb.yaml \
       --global
    

测试

请记下预留的 IPv4 地址:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

在等待几分钟,直到更改完成传播后,您可以测试此设置。

在命令行上,运行以下 curl 命令:

curl http://IP_ADDRESS/two-dogs.jpg

在浏览器中,打开 http://IP_ADDRESS/two-dogs.jpg

后续步骤