首页 > 解决方案 > 自定义子域上的 AppEngine“Google 管理的自动续订”SSL 证书错误地路由内容

问题描述

我有一个使用 app id 运行 AppEngine 的 Google Cloud 项目myapp。我已将此应用程序 ID 映射到自定义域example.com。我已将默认版本设置myappwww. 它secure: always适用于我的 app.yaml 中的所有处理程序。此设置用于将 HTTP 流量重定向到 HTTPS。最后,我为www.example.com. 对于这些路由中的每一个,我都允许 Google 管理和自动更新 SSL 证书。设置面板如下所示:

App Engine 域 - 设置面板

这很好,因为所有 HTTP 请求都被路由到它们相应的 HTTPS 端点。

几天前,我被要求制作一个新版本的应用程序alpha并希望将其路由到https://alpha.example.com. 就像www我设置secure: always为对备用协议强制执行 HTTPS 重定向的版本一样。我还为 alpha.example.com 添加了一条 CNAME 记录,并向其中添加了“Google 管理的自动续订”证书。http://alpha.example.com正确重定向到https://alpha.example.com但是,https://alpha.example.com提供我的应用程序的默认版本www而不是我的新版本alpha。App Engine 自定义域仪表板中的新设置如下所示:

App Engine 域 - 带有新子域的设置面板

我可以做些什么来确保http(s)?://(www)?.example.com提供版本wwwhttp(s)?://alpha.example.com提供版本alpha并确保所有内容都通过 https 提供?

标签: google-app-enginehttps

解决方案


根据自定义域文档

输入*.example.com会将 example.com 的所有子域映射到您的应用程序。

这意味着您必须手动处理dispatch.yaml文件中的映射。

在你的情况下,你会想要这样的东西:

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

请注意规则的顺序,因为请求将根据url匹配的第一个模式进行路由。

有关 GAE 标准如何路由请求的更深入的说明,请查看如何路由请求文档。

要将请求重定向到https应用程序的版本,请继续secure在您的app.yaml.


推荐阅读