如何在Google App Engine中为每个服务绑定一个域/子域?

时间:2018-05-16 07:28:27

标签: google-app-engine google-cloud-platform

我在查找如何将多个域映射到GAE中的多个服务时遇到了很多麻烦。这是配置:

  • 一个应用程序是Go API,在标准环境中的GAE中部署
  • 第二个应用程序是一个Angular应用程序,也在标准环境中的GAE中部署,但作为另一个服务。

以下是app.yaml文件:

转到应用app.yaml

runtime: go
api_version: go1.9

handlers:
- url: /.*
  script: _go_app

Angular app app.yaml

service: stage
runtime: python27
api_version: 1
threadsafe: true

skip_files:
- ^(?!dist)  # Skip any files not in the dist folder

handlers:
# Routing for bundles to serve directly
- url: /((?:inline|main|polyfills|styles|vendor)\.[a-z0-9]+\.bundle\.js)
  secure: always
  redirect_http_response_code: 301
  static_files: dist/\1
  upload: dist/.*

# Routing for a prod styles.bundle.css to serve directly
- url: /(styles\.[a-z0-9]+\.bundle\.css)
  secure: always
  redirect_http_response_code: 301
  static_files: dist/\1
  upload: dist/.*

# Routing for typedoc, assets and favicon.ico to serve directly
- url: /((?:assets|docs)/.*|favicon\.ico)
  secure: always
  redirect_http_response_code: 301
  static_files: dist/\1
  upload: dist/.*

# Any other requests are routed to index.html for angular to handle so we don't need hash URLs
- url: /.*
  secure: always
  redirect_http_response_code: 301
  static_files: dist/index.html
  upload: dist/index\.html
  http_headers:
      Strict-Transport-Security: max-age=31536000; includeSubDomains
      X-Frame-Options: DENY

我有一个域名,想要将Go API绑定到 api.domain.com ,将Angular应用绑定到 domain.com

转到 App Engine>设置>自定义域我设法为我的API添加域,它完全正常工作 但现在,我找不到将 domain.com 映射到我的Angular应用程序的方法。转到相同的设置不会让我选择将不同的服务映射到我的域。

感谢您的帮助,祝您度过愉快的一天!

2 个答案:

答案 0 :(得分:6)

要映射子域,您可以使用dispatch.yaml文件。一个例子:

dispatch:
    - url: "example.com/*"
    service: default

  - url: "api.example.com/*"
    service: otherservice

然后运行$ gcloud app deploy dispatch.yaml(它可以在任何目录中)。

在App Engine>下添加example.com后设置>默认服务的自定义域,您可以为其他服务添加子域api.example.com。稍后,您需要将新的子域DNS记录添加到域注册器,如控制台配置中所述。

答案 1 :(得分:0)

您想首先将裸露的domain.com映射到您的应用。

然后选择添加其他域名,您就可以选择将api(或任何其他)domain.com子域名添加到特定服务。

请注意,您在2个服务中有一个冲突/重叠的处理程序模式:- url: /.*,这不会起作用,因为GAE不知道将此类请求指向哪个服务,他们&# 39; ll最终都发送到同一个服务。您需要以非重叠方式对请求URL命名空间进行分区,并且您可能还需要dispatch.yaml文件。有关详细信息,请参阅Mapping subdomain to a service in Google App Engine project