请求的路由方式 (original) (raw)

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

本页面介绍了用户发出的 HTTP 请求到达服务相应版本的方式。请求可以通过以下方式路由:

上述方式仅适用于已部署的应用。当您在本地进行测试时,路由行为取决于您正在使用的特定运行时和开发环境。

请注意,如果您使用旧版捆绑服务通过本地开发服务器测试应用,则可用的路由和调度功能略有不同。如需以编程方式创建同时适用于生产服务器和开发服务器的网址,请使用get_hostname 方法。如需了解详情,请参阅在开发服务器中路由

使用网址进行路由

一旦您的应用能够在 App Engine 中运行,您就可以使用以下网址向应用发送 HTTP 请求:

https://PROJECT_ID.[REGION_ID](#appengine-urls).r.appspot.com

其中,PROJECT_ID 是包含该应用的 Google Cloud 项目的 ID。

此网址将请求发送到您已配置为接收流量的版本的应用默认服务。

服务和版本的网址

如果您的应用创建了多项服务,则每项服务都有自己的网址。服务的每个版本也都有自己的网址,因此您可以先行部署并测试一个新的版本,然后再将其配置为接收流量。

特定服务和版本的网址采用以下格式:

VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

如果您不需要定位特定版本,则可以省略 VERSION-dot-

如需检索应用的服务和版本的 ID,您可以使用以下任何工具:

示例网址

以下是 App Engine 的一些示例网址,其中显示了 App Engine 分配给您的应用的 appspot.com 网域以及您可以为应用设置的自定义网域。

软路由

如果一个请求与主机名的 PROJECT_ID.REGION_ID.r.appspot.com 部分匹配,但包含不存在的服务、版本或实例名称,则该请求会被路由到 default 服务。软路由不适用于自定义网域;如果主机名无效,发送到自定义网域的请求将返回 HTTP 404 状态代码。

定向路由

如果以下网址格式存在,则采用这些网址格式的请求可以到达其目标。未通过 Cloud Load Balancing 的请求永远不会被您在调度文件中定义的格式拦截和重新路由:

使用调度文件进行路由

您可以创建调度文件以替换 App Engine 基于网址的路由规则并定义自己的自定义路由规则。使用调度文件,您可以根据传入请求网址中的路径或主机名将请求发送到特定服务。

创建调度文件

如需创建调度文件,请执行以下操作:

  1. 在用于其他配置文件(例如 app.yaml)的同一个目录中创建一个名为 dispatch.yaml位于项目的根目录中,或者位于 default 服务的根目录中。
  2. 按照 dispatch.yaml 参考文档中的说明在该文件中定义路由规则。

对于路由规则,请注意以下事项:

例如,您可以创建一个调度文件,将诸如 https://simple-sample.uc.r.appspot.com/mobile/ 的移动请求路由到移动前端,并将诸如 https://simple-sample.uc.r.appspot.com/work/ 的工作器请求路由到静态后端:

dispatch:
  # Send all mobile traffic to the mobile frontend.
  - url: "*/mobile/*"
    service: mobile-frontend

  # Send all work to the one static backend.
  - url: "*/work/*"
    service: static-backend

部署调度文件

如需使用 gcloud 部署调度文件,请运行以下命令:

gcloud app deploy dispatch.yaml

使用 Cloud Load Balancing 进行路由

Cloud Load Balancing 是一个单独的产品,可为在 Google Cloud上运行的所有应用启用高级网络配置。

为无服务器应用启用 HTTP(S) 负载平衡后,您可以执行以下操作:

在路由映射到 App Engine 无服务器 NEG 的请求时,仅当无服务器 NEG 未指定服务或版本,负载均衡器才会参考调度规则。无服务器 NEG 中已配置服务或版本时,负载均衡器会忽略调度规则。

请注意以下几点:

了解网址中的区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

您可以使用以下工具查看应用的区域 ID:

控制台

在 Google Cloud 控制台中,您可以查看应用实例服务版本的网址。

所有这些网址都包含区域 ID。

gcloud

部署应用或服务时,gcloud app deploy 命令会在部署成功后显示网址。此网址包含区域 ID。

如需查看已部署服务的网址,请执行以下操作:

  1. 输入 gcloud app versions list 命令列出特定服务的版本。例如,如需列出默认服务的版本,请输入 gcloud app versions list --service=default
  2. 输入 gcloud app versions describe 命令。该命令的输出结果包含带应用区域 ID 的版本网址。例如,如需为默认服务描述版本 20191023t101741,请输入 gcloud app versions describe 20191023t101741 --service=default

域名包含在请求数据中

请求对应的域名包含在传递给您的应用的请求数据中。因此,您可以使用请求数据来控制您的应用如何根据请求中的域名进行响应。例如,如果您希望重定向到一个官方网域,可以在应用编码中检查 Host 请求标头,然后根据域名作出相应的响应。