为经典版应用负载均衡器设置网址重写

此示例演示了如何重写传统应用负载均衡器请求中指定的路径。

如需为全球级外部应用负载均衡器和区域级外部应用负载均衡器配置流量管理,请参阅以下页面:

准备工作

  • 了解网址重写

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

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

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

    • 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 控制台中的“负载均衡”页面。
    进入“负载均衡”页面
  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

后续步骤