【问题标题】:Setting up custom domains (with subdomains) on Google App Engine with SSL with different versions of app使用 SSL 在 Google App Engine 上使用不同版本的应用程序设置自定义域(带有子域)
【发布时间】:2014-10-13 20:11:21
【问题描述】:

我想解决的问题

我希望能够在启用 SSL 的自定义域上将不同用户发送到我的 Google App Engine 应用程序的不同版本。这需要以可控的方式完成,即,即使着陆页也应该不同,并且必须为用户在多个单元上工作。

解决方法我无法上班

我正在尝试使用子域设置自定义域,并希望能够访问不同版本的应用程序。例如,我有 myapp.mydomain.com,我想在 alpha.myapp.mydomain.com 上运行一个版本 (alpha),在 beta.myapp.mydomain.com 上运行一个版本 (beta)(默认为 alpha) .

我使用 Google Developers Console 设置自定义域,使用 myapp.mydomain.com 和 *.myapp.mydomain.com 作为自定义域。

只要我不尝试添加 SSL,它就可以完美运行,即 beta.myapp.mydomain.com 提供名为 beta 的版本。当我设置 SSL 时,我首先将我的应用程序添加到 Google Apps(根据 https://developers.google.com/appengine/docs/ssl),然后将我的域设置为指向我的应用程序。首先我添加 myapp.mydomain.com,然后添加 alpha.myapp.mydomain.com,最后添加 beta.myapp.mydomain.com。

完成后 beta.myapp.mydomain.com 开始提供默认版本。除了它有时也提供 beta 版本(这种情况每 20 次左右就会发生一次,我认为它现在是一个小故障)。

我的问题: a) 我应该在 Google Apps 和 Google Developer Console 中都设置我的域吗?还是应该从 Google Developer Console 中删除设置?我都试过了,似乎给出了相同的结果。 b)似乎可以通过使用模块来完成它,如 Google App Engine custom domains, subdomains and SSL 和Appengine modules dispatch.xml routing with custom domain。这是唯一的方法,还是我在设置中做错了什么?

到目前为止我收到的建议

一个建议是使用流量拆分并根据我希望用户最终使用的版本设置一个唯一的 cookie。我不知道这一点,它将解决我一直在寻找的其他一些问题。但是它并不能解决我当前的问题,因为我需要在登录之前设置此设置。不过答案很有用。

【问题讨论】:

    标签: google-app-engine ssl wildcard-subdomain


    【解决方案1】:

    我会回答我为使这项工作为我所做的工作。

    我没有将用户发送到应用程序的不同版本,而是创建了一个名为 alpha 的新模块,并使用 dispatch.xml 将使用 alpha.myapp.mydomain.com 的用户定向到该模块。

    <dispatch>
        <url>*alpha.myapp.mydomain.com/*</url>
        <module>alpha</module>
    </dispatch>
    

    我在 App Engine 控制台 (https://console.developers.google.com) 的 Compute->App Engine->Custom Domains 下为 *.myapp.mydomain.com 和 alpha.myapp.mydomain.com 设置了自定义域。我还在 Google Apps (https://admin.google.com) 上将 URL alpha.myapp.mydomain.com 添加到我的 App Engine 应用程序接受的 URL 中。这也让我可以在 SSL 上运行。

    我打算在另一个域(我的主域的域别名)下运行该应用程序,所以我也尝试过。为了完成这项工作,我只在 Google Apps 中将域别名添加为 www.mydomainalias.com 和 alpha.mydomainalias.com,因为如果我将其添加到 Google App Engine 自定义域中,我会收到一条错误消息(“我们无法处理您的此时请求。请稍后再试。(错误#1000)“)。我不知道为什么它没有成功。

    【讨论】:

      【解决方案2】:

      与设置额外的子域和额外的 SSL 证书相比,更简单的方法是在 cookie 级别执行 traffic splitting。 使用此方法无需更改访问您的 alpha 版本的域名。

      来自文档:

      您应用的响应尚未包含 Set-Cookie: GOOGAPPUID=... 标头。这允许您的应用程序控制哪个版本 用户获取。

      【讨论】:

      • 知道了。问题是我还希望能够控制它,例如,如果我添加新功能,我想在开始流量拆分或发布给每个人之前为某些用户运行它们,并且最好通过连接子来做到这一点域到版本。
      • 您可以创建一个后端 UI 来控制将 cookie 分发给您的用户。我也一直在考虑子域方法,但这是一个很大的麻烦,如果不购买/生成额外的证书、上传、DNS 配置等,就永远无法在 SSL 上工作。
      • 我需要研究一下它是否可行。我需要在用户登录之前转移流量,我真的不知道该怎么做。也许我可以为用户体验找到另一种解决方案。
      • 再次过度思考(这里的情况相同),也许只需使用 URL 参数“baseUrl?version=alpha”调用应用程序,这可能会在服务时触发将 cookie 设置为正确的值,可能就足够了吗?
      猜你喜欢
      • 2015-11-07
      • 2014-07-05
      • 2020-12-15
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多