我有一个Google App Engine Project,sell yaml文件
handlers:
- url: /web/.*
script: web_server.app
- url: /api/.*
script: rest_server.app
我如何确保由我拥有的域的子域,由restrongerver.app脚本提供。
示例:如果我拥有example.com
我希望example.com
由web_server.app
提供,并且api.example.com
由rest_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