使用具有不同版本的应用的SSL在Google App Engine上设置自定义域(带子域)

时间:2014-08-20 12:51:24

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

我想解决的问题

我希望能够在启用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开始提供默认版本。除了它有时也提供测试版(这种情况每20次尝试一次,我认为现在是一个小问题)。

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

到目前为止我收到的建议

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

2 个答案:

答案 0 :(得分:1)

我会回答我的所作所为,让我为我工作。

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

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

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

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

答案 1 :(得分:-1)

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

来自文档:

  

您应用的响应尚未包含Set-Cookie:   GOOGAPPUID = ...标题。这允许您的应用控制哪个版本   用户得到。