use*_*455 4 subdomain google-app-engine google-domain-api
我有一个包含以下yaml文件的Google App Engine项目
handlers:
- url: /web/.*
script: web_server.app
- url: /api/.*
script: rest_server.app
Run Code Online (Sandbox Code Playgroud)
如何确保我拥有的域的子域由rest_server.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
Run Code Online (Sandbox Code Playgroud)
请求路由app.yaml不能用于根据URL的域名进行路由,请参阅Handlers元素 doc部分中的url表行.
因此,您无法真正为您的应用程序提供单个模块/服务,同时剥离您当前在处理程序url配置中使用的URL的文件路径部分,以便将请求路由到一个脚本或另一个脚本.
您可以通过将应用程序拆分为两个单独的服务/模块来获得您的需求,每个服务/模块处理一个脚本.其中一个模块必须是默认模块,我将其作为默认模块web.一个dispatch.yaml文件将被用于将请求路由到基于URL主机各自的模块.
该web.yaml文件将包含:
module: default
handlers:
- url: /.*
script: web_server.app
Run Code Online (Sandbox Code Playgroud)
该rest.yaml文件将包含:
module: rest
handlers:
- url: /.*
script: rest_server.app
Run Code Online (Sandbox Code Playgroud)
在dispatch.yaml文件中,您只需要非默认模块的路由,默认情况下,匹配无路由的请求将路由到defaut模块:
- url: "api.example.com/*"
module: rest
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到更完整的示例:https://stackoverflow.com/a/34111170/4495081
然后,您可以将example.com 裸域和api.example.com 子域映射到您的应用.按照为应用程序添加自定义域的过程,在配置裸域与子域时要特别注意略有不同的部分.另请参见/sf/answers/2542222371/
有一个问题,dispatch.yaml基于主机名的路由不适用于本地开发服务器,发往rest模块的请求实际上将转到default模块.
一个更简单的解决方法是将rest模块客户端定向到实际的localhost:本地devserver的rest模块侦听的PORT URL (在dev服务器启动时显示在终端中).
这可能无法在所有情况下或所有应用程序中实现.例如,如果应用程序使用自动生成的URL发出跨模块请求,则会出现问题.
在这种情况下,要解决此问题,您rest.yaml只能在本地开发服务器上测试rest模块时在URL中临时插入一个小路径部分(您需要在客户端和/或跨模块URL生成上进行匹配更改)逻辑):
module: rest
handlers:
- url: /api/.*
script: rest_server.app
Run Code Online (Sandbox Code Playgroud)
然后,您可以添加一个dispatch.yaml非基于主机的规则,也可以添加本地开发服务器.这可以永久保留在那里,当临时rest.yaml更改被逆转时,如果/在生产中部署时不会受到影响:
- url: "api.example.com/*"
module: rest
- url: "*/api/*"
module: rest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2100 次 |
| 最近记录: |