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

Fre*_*ooc 1 google-app-engine cloudflare

我正在尝试使用Cloudflare for Saas配置我的 Google App Engine 实例,更准确地说是使用 Cloudflare for SaaS产品的 SSL。目标是我可以向我的客户提供一个“自定义域”(也称为“虚荣域”),这样他们就不会访问dashboard.mywebsite.com,而是访问app.customerwebsite.com

配置部分

为了确保我的 App Engine 实例能够正确地在 上提供内容dashboard.mywebsite.com,我进行了以下操作:

在谷歌云方面:

  • 我已经配置了自定义域dashboard.mywebsite.com
  • 我已让 Google 管理 SSL 配置(无自定义密钥/证书)

Google Cloud 自定义域配置

  • 这是我的app.yaml配置文件:
runtime: nodejs14

env_variables:
  NODE_ENV: 'production'

basic_scaling:
  max_instances: 10
  idle_timeout: 5m
Run Code Online (Sandbox Code Playgroud)

在 Cloudflare 方面:

  • 我已经更新了 DNS 记录,因此dashboard.mywebsite.com可以完美运行
  • 我已经在完整模式下配置了 SSL (虽然我也尝试过灵活模式- 两者都有效)

Cloudflare DNS 区域

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

接下来,自定义域

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

Cloudflare 中的自定义主机名配置

现在,再次根据Cloudflare 文档,我的客户必须创建一条CNAME记录。我对我的域名做了如下操作:

app.customerwebsite.com CNAME dashboard.mycompany.com
Run Code Online (Sandbox Code Playgroud)

问题

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

有什么想法会有帮助吗?

Fre*_*ooc 5

正如您所注意到的,该问题与 Cloudflare 无关,而是与 App Engine 有关。您的配置问题在于,当 App Engine 收到请求时,Host它会根据标头将请求转发到正确的实例。

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

您需要执行以下操作:

  1. 使用 Google Cloud 启用静态 IP 地址
  2. 将您的 DNS 记录从 更改dashboard CNAME ghs.googlehosted.comdashboard A YOUR_IP_ADDRESS
  3. 配置 Google Cloud Load Balancer 以将在该 IP 地址上收到的请求映射到您的 App Engine 实例。

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

Google 云负载均衡器配置详细信息

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

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

dispatch:
  - url: '*/*'
    service: default
Run Code Online (Sandbox Code Playgroud)

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