将子域映射到Google App Engine Project中的服务



我有一个Google App Engine Project,sell yaml文件

handlers:
- url: /web/.*
  script: web_server.app
- url: /api/.*
  script: rest_server.app

我如何确保由我拥有的域的子域,由restrongerver.app脚本提供。

示例:如果我拥有example.com

我希望example.comweb_server.app提供,并且api.example.comrest_server.app

提供

可以使用Google App Engine做到这一点。

示例:

handlers:
- url: example.com/.*
  script: web_server.app
- url: api.example.com/.*
  script: rest_server.app

app.yaml中的请求路由无法根据URL的域名路由路由,请参见"处理程序元素文档"部分中的url表行。

因此,您实际上无法真正拥有一个单个模块/服务,同时删除了您当前在处理程序的url配置中使用的url的filepath部分,以将请求路由到一个脚本或另一个脚本。

您可以通过将应用程序分为2个单独的服务/模块,每个处理一个脚本来获得所需的内容。其中一个模块必须是默认模块,我将web默认一个。dispatch.yaml文件将用于基于URL主机名将请求路由到其各自的模块。

web.yaml文件将包含:

module: default
handlers:
- url: /.*
  script: web_server.app

rest.yaml文件将包含:

module: rest
handlers:
- url: /.*
  script: rest_server.app

dispatch.yaml文件中,您仅需要非默认模块的路由,默认情况下,匹配的请求不符合任何路由的路由,请访问defaut模块:

- url: "api.example.com/*"
  module: rest

您可以在此处找到一个更完整的示例:https://stackoverflow.com/a/34111170/4495081

然后,您将example.com 裸域api.example.com subdomain 映射给您的应用。遵循为您的申请过程添加自定义域,对配置裸域与子域时略有不同的部分额外关注。另请参阅https://stackoverflow.com/a/36317462/4495081

有一个问题,基于主机名的dispatch.yaml路由不适用于本地开发服务器,rest模块的请求实际上将用于default模块。

更简单的解决方法是将rest模块客户端引导到实际的localhost:port url,其中local devserver的rest模块listens(在Dev Server启动的终端显示),而不是。

在所有情况下或所有应用程序中都不可能。例如,如果该应用使用自动生成的URL提出交叉模块请求,则是一个问题。

在这种情况下,要围绕它进行工作,您只能在rest.yaml URL中暂时插入一个小路径部分,只有在本地DEV服务器上的测试中,rest模块(您需要在客户端端和/或需要匹配更改跨模块URL生成逻辑):

module: rest
handlers:
- url: /api/.*
  script: rest_server.app

然后,您可以添加一个不是基于主机的dispatch.yaml规则,也将使用本地DEV服务器。这可以永久保留在那里,如果/当临时rest.yaml更改被逆转时,它不会受到伤害:

- url: "api.example.com/*"
  module: rest
- url: "*/api/*"
  module: rest

相关内容

  • 没有找到相关文章

最新更新