自定义子域上的 AppEngine“Google 管理的自动续订”SSL 证书错误地路由内容

Posted

技术标签:

【中文标题】自定义子域上的 AppEngine“Google 管理的自动续订”SSL 证书错误地路由内容【英文标题】:AppEngine "Google-managed, auto-renewing" SSL Certificates on Custom Subdomain Incorrectly Route Content 【发布时间】:2018-08-07 04:23:19 【问题描述】:

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

这很好,因为所有 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 自定义域仪表板中的新设置如下所示:

如何确保http(s)?://(www)?.example.com 服务于版本wwwhttp(s)?://alpha.example.com 服务于版本alpha,并确保所有内容都通过https 提供?

【问题讨论】:

这最初是发布的,但在 ServerFault 上被搁置。我被要求在其他地方发帖,因为那里没有话题。原链接可以找到here 【参考方案1】:

根据custom domain docs:

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

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

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

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

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

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

要保持请求被重定向到应用程序的https 版本,请继续在app.yaml 中使用secure 指令。

【讨论】:

非常感谢!我不知道 dispatch.yaml。我会试一试。 抱歉耽搁了,但这完全解决了问题!谢谢!

以上是关于自定义子域上的 AppEngine“Google 管理的自动续订”SSL 证书错误地路由内容的主要内容,如果未能解决你的问题,请参考以下文章

AppEngine 开发服务器上的 Google KMS - 日志混乱

如何从自定义源的请求中获取 Cloudfront 子域?

如何允许用户将自定义域指向我应用程序的子域

使用 Google AppEngine 创建 Java Web 服务

在 Google API 中使用自定义帐户而不是服务帐户

Google Cloud Endpoints 的自定义身份验证(而不是 OAuth2)