2016-11-23 75 views
2

我有一个谷歌App Engine的项目,下面YAML文件子域映射到谷歌应用程序引擎项目服务

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

- url: /api/.* 
    script: rest_server.app 

如何确保子域名,我自己的域名,由rest_server.app送达脚本。

例子:如果我拥有example.com

我想example.comweb_server.app送达,并api.example.comrest_server.app

送达是否有可能做到这一点使用谷歌应用程序引擎。

实例:app.yaml

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

刚刚澄清,你的2个脚本实际上不是GAE ** **服务(正如帖子标题中提到的),它们在您的应用程序的单一/'默认'GAE服务中只是不同的**脚本**。您将在下面看到与我的答案有所不同 - 解决方案*基于GAE服务。我只是注意到了可能的混淆不一致:) –

回答

4

请求路由不能用于基于URL的域名路线,看到Handlers element文档部分url表行。

因此,您不能真正拥有一个为您的应用程序提供服务的模块/服务,同时剥离您当前在处理程序中使用的URL的文件路径部分'url配置将请求路由到一个脚本或另一个脚本。

你可以通过将你的应用分成两个独立的services/modules来获得你想要的东西,每个处理一个脚本。其中一个模块必须是默认模块,我会默认使用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文件,你只需要在非默认模块(S)的路线,要求匹配没有路由默认路由到默认模块:

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

您可以在这里找到一个更完整的例子:https://stackoverflow.com/a/34111170/4495081

那么你既映射你的example.com裸域api.example.com子域到您的应用程序。遵循Adding a custom domain for your application过程,特别注意配置裸域与子域时略有不同的部分。另请参见https://stackoverflow.com/a/36317462/4495081

有一个问题,寿 - 基于主机名不与本地开发服务器工作dispatch.yaml路由,目的地为rest模块的要求实际上去了default模块。

更简单的解决方法是将rest模块客户端指向本地devserver的rest模块监听的实际localhost:PORT URL(在dev服务器启动时显示在终端上),取而代之。

可能不可能在所有情况下或所有的应用程序。例如,如果应用使用自动生成的URL发出跨模块请求,则会出现问题。

在这种情况下,要解决它,你可以暂时插入在rest.yaml URL小路径部分,只在本地开发服务器上测试rest模块中(你需要在客户端匹配的变化和/或跨模块URL生成逻辑):

module: rest 

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

然后你就可以添加不是基于主机的一个dispatch.yaml规则,也将与本地开发服务器。这可以在离开那里永久,它不会伤害,如果/当部署在生产中当临时rest.yaml变化是相反的:

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

如何部署这个新的结构。我尝试过'gcloud app delpoy web.yaml rest.yaml',但没有奏效。裸域和api。* subdomian都由web.yaml提供。 现在,我试图部署使用以下命令'gcloud应用程序部署web.yaml rest.yaml dispatch.yaml'。这需要很长时间,并且在此日志声明之后没有任何进展。 INFO:上传[/server/src/dispatch.yaml]至[899bc6aeea3e3615e45e54eefe593acf2065b6b3] – user462455

+1

看起来有在我dispatch.yaml不必要的空间,是造成'gcloud应用问题deploy'卡住而上传dispatch.yaml。这样一个奇怪的问题(我能够重现它,以确保它是导致问题的空间)。 'gcl​​oud应用程序部署web.yaml rest.yaml dispatch.yaml'工作!谢谢!!! – user462455

+0

我想知道dispatch.yaml是否可以和appengine flex一起工作,我想 – the0ther