自定义域/捕获 Google App Engine 上的所有主机名

Custom domains / catch all hostnames on Google App Engine

我正在尝试使用 Cloudflare for Saas, and more precisely Cloudflare's SSL for SaaS 产品配置我的 Google App Engine 实例。 objective 是我可以为我的客户提供一个“自定义域”(也称为“虚名域”),这样他们就不会转到 dashboard.mywebsite.com,而是 app.customerwebsite.com .

配置部分

为确保我的 App Engine 实例在 dashboard.mywebsite.com 上正确提供内容,我做了以下工作:

在Google云端:

runtime: nodejs14

env_variables:
  NODE_ENV: 'production'

basic_scaling:
  max_instances: 10
  idle_timeout: 5m

在 Cloudflare 方面:

我等了几个小时,确认 dashboard.mywebsite.com 正确解析并提供了我的内容(来自 Google App Engine)。

接下来,自定义域

根据 Cloudflare documentation,我必须注册回退源(即 dashboard.website.com),然后配置自定义主机名(例如 app.customerwebsite.com)。我做到了。

现在,根据 Cloudflare documentation again,我的客户必须创建一条 CNAME 记录。我用我的域做了:

app.customerwebsite.com CNAME dashboard.mycompany.com

问题

我又等了几个小时。然后,当我在浏览器中打开 app.customerwebsite.com 时,它显示 Google 404 错误页面而不是我的仪表板。这让我认为 Cloudflare 成功地将流量“重定向”到 Google,但 App Engine 拒绝为其提供服务。可能是因为它不知道app.customerwebsite.com?

有什么有用的想法吗?

如您所见,该问题与 Cloudflare 无关,而与 App Engine 相关。您的配置存在问题,当 App Engine 收到请求时,基于 Host header,它会将请求转发到正确的实例。

App Engine 允许您映射之前已由 Google 验证的任何自定义域。但在您的情况下,这意味着您必须在 App Engine 实例上注册客户的每个自定义域。那太麻烦了(如果可能的话)。

您需要做的是:

  1. 使用 Google 云
  2. 启用静态 IP 地址
  3. 将您的 DNS 记录从 dashboard CNAME ghs.googlehosted.com 更改为 dashboard A YOUR_IP_ADDRESS
  4. 配置 Google 云负载均衡器,将在该 IP 地址上收到的请求映射到您的 App Engine 实例。

Google 的文档对如何 setup a load balancer with Cloud Run 有很好的指导。通过更改一些设置,它可以很好地与 App Engine 配合使用。作为额外的帮助,下面是我们的负载均衡器的配置详细信息,它允许我们通过 Google 云向我们的客户提供个性化域/自定义域:

同样,负载均衡器在这里负责将您的 IP 地址(无论 Host header)收到的所有请求直接映射到您的 App Engine 实例。

作为最佳实践,将 dispatch.yaml 文件推送到您的实例可能会有用:

dispatch:
  - url: '*/*'
    service: default

它告诉 App Engine 将所有请求发送到 default 服务。它的工作方式有点像 Apache 服务器上的通配符虚拟主机。