2016-11-23 73 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