自定义域/捕获 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云端:
- 我已经配置了自定义域
dashboard.mywebsite.com
。
- 我让 Google 管理 SSL 配置(无自定义 key/certificate)
- 这是我的
app.yaml
配置文件:
runtime: nodejs14
env_variables:
NODE_ENV: 'production'
basic_scaling:
max_instances: 10
idle_timeout: 5m
在 Cloudflare 方面:
- 我已经更新了 DNS 记录,因此
dashboard.mywebsite.com
可以正常工作
- 我已经在 Full 模式下配置了 SSL(虽然我也尝试过 Flexible - 两者都有效)
我等了几个小时,确认 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 实例上注册客户的每个自定义域。那太麻烦了(如果可能的话)。
您需要做的是:
- 使用 Google 云
启用静态 IP 地址
- 将您的 DNS 记录从
dashboard CNAME ghs.googlehosted.com
更改为 dashboard A YOUR_IP_ADDRESS
- 配置 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 服务器上的通配符虚拟主机。
我正在尝试使用 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云端:
- 我已经配置了自定义域
dashboard.mywebsite.com
。 - 我让 Google 管理 SSL 配置(无自定义 key/certificate)
- 这是我的
app.yaml
配置文件:
runtime: nodejs14
env_variables:
NODE_ENV: 'production'
basic_scaling:
max_instances: 10
idle_timeout: 5m
在 Cloudflare 方面:
- 我已经更新了 DNS 记录,因此
dashboard.mywebsite.com
可以正常工作 - 我已经在 Full 模式下配置了 SSL(虽然我也尝试过 Flexible - 两者都有效)
我等了几个小时,确认 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 实例上注册客户的每个自定义域。那太麻烦了(如果可能的话)。
您需要做的是:
- 使用 Google 云 启用静态 IP 地址
- 将您的 DNS 记录从
dashboard CNAME ghs.googlehosted.com
更改为dashboard A YOUR_IP_ADDRESS
- 配置 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 服务器上的通配符虚拟主机。