将子域映射到 Google App Engine 项目中的服务

2023-12-25

我有一个带有以下 yaml 文件的 Google App Engine 项目

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

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

如何确保我拥有的域的子域由rest_server.app 脚本提供服务。

示例:如果我拥有 example.com

I want example.com服务于web_server.app, and api.example.com服务于rest_server.app

是否可以使用 Google App Engine 来做到这一点。

Example:

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

请求路由在app.yaml不能用于根据URL的域名进行路由,请参见url表行中的处理程序元素 https://cloud.google.com/appengine/docs/python/config/appref#handlers_element文档部分。

因此,您实际上无法让单个模块/服务为您的应用程序提供服务,同时剥离您当前在处理程序中使用的 URL 的文件路径部分url用于将请求路由到一个脚本或另一个脚本的配置。

您可以通过将应用程序分成 2 个独立的应用程序来获得您想要的内容服务/模块 https://cloud.google.com/appengine/docs/python/an-overview-of-app-engine#services_the_building_blocks_of_app_engine,每个处理一个脚本。其中一个模块必须是默认模块,我会将web默认值之一。 Adispatch.yaml https://cloud.google.com/appengine/docs/python/config/dispatchref文件将用于根据 URL 主机名将请求路由到各自的模块。

The web.yaml文件将包含:

module: default

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

The rest.yaml文件将包含:

module: rest

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

In the dispatch.yaml在文件中,您只需要非默认模块的路由,不匹配路由的请求默认路由到默认模块:

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

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

然后你就可以映射你的example.com 裸域 and api.example.com 子域到您的应用程序。跟着为您的应用程序添加自定义域 https://cloud.google.com/appengine/docs/python/console/using-custom-domains-and-ssl#adding_a_custom_domain_for_your_application过程,请特别注意配置裸域与子域时略有不同的部分。也可以看看https://stackoverflow.com/a/36317462/4495081 https://stackoverflow.com/a/36317462/4495081

有一个problem, tho - dispatch.yaml基于主机名的路由不适用于本地开发服务器,发往rest模块实际上会转到default模块。

一个更简单的解决方法是直接rest模块客户端到实际的 localhost:PORT URL,其中本地开发服务器的rest相反,模块侦听(在开发服务器启动时显示在终端中)。

This might并非在所有情况下或对于所有应用程序都是可行的。例如,如果应用程序使用自动生成的 URL 发出跨模块请求,就会出现问题。

在这种情况下,要解决此问题,您可以临时在路径中插入一个小路径部分rest.yamlURL,仅在本地开发服务器上测试期间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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将子域映射到 Google App Engine 项目中的服务 的相关文章

随机推荐