AppEngine实例的许多自定义域

时间:2010-01-01 23:37:04

标签: google-app-engine

对于我们在AppEngine上运行的电子商务服务,我们希望为客户提供在其自定义域上运行商店的选项(例如:www.mystore.com而不是www.enstore.com/mystore).

从用户的角度来看,我希望他们在偏好设置屏幕中输入他们想要使用的域名,并告诉他们如何配置他们的DNS。

我知道您通常如何将域添加到AppEngine实例(通过Google Apps),但我不确定您是否可以将其自动化。即使有可能,我们的谷歌应用程序页面上也会列出所有(数百个)。

任何人都知道这是否可行/是否有好办法?

3 个答案:

答案 0 :(得分:5)

我认为没有办法以“编程方式”将域添加到AppEngine实例。显然,只能使用您描述的Google Apps方法添加域名。这个SO帖子证实了这一点:How do i get foo.somedomain.com get handled by myapp.appspot.com/foo on appengine

我想到的唯一选择如下:

  • HTTP重定向

    许多DNS提供商都支持HTTP重定向。在这种情况下,您的客户可以设置mystore.comwww.mystore.com重定向到www.enstore.com/mystore。这种方法有一些明显的缺点,可能是不可接受的。首先,使用301和302重定向,用户仍将转发到已注册的AppEngine URL:www.enstore.com/mystore,并将在其浏览器中显示。此外,在301和302重定向之间进行选择可能会使SEO变得棘手,因为您必须了解搜索引擎如何使用这些重定向。例如,当您使用301重定向时,大多数搜索引擎都不会将原始URL用作关键字的来源。

    除301和302重定向外,某些DNS提供商(如DNS Made Easy)也提供了所谓的“屏蔽隐藏iframe重定向”。该页面将在隐藏的iframe内呈现,因此URL不会在用户的浏览器中更改。然而,这使搜索引擎优化更加棘手,它不允许用户为内部页面添加书签或轻松引用它们。

    正如您所看到的,此选项不太理想,但在某些情况下这是一个需要考虑的选项。另请注意,目前,使用301重定向的HTTP重定向是AppEngine问题跟踪器上Naked Domain Issue 777的建议解决方法。

  • 反向代理

    另一种选择可能是在其他地方设置小型服务器,例如小型Amazon EC2 Instance,并设置一个简单的reverse proxy。只需使用Apache和mod_proxy(或其他各种替代方案),您就可以非常轻松地进行设置。这将允许您要求您的客户端设置指向此实例的正常A记录,而Apache HTTP服务器将充当您的AppEngine的代理。

    在mod_proxy中设置反向代理的基本配置指令是ProxyPass。您通常会为每个VirtualHost(对于每个客户端域)设置一行,如下所示:

    ProxyPass / http://www.enmystore.com/mystore/

    您的后端软件可以轻松处理远程代理的配置。

    这是一个更简洁的解决方案,可以为您提供充分的控制 - 但显然有一些成本可以带来这些好处。首先,托管反向代理需要花费。您还将添加另一个故障点,因此您必须将其添加到高可用性计划中。此外,如果您通过SSL提供某些页面,它可能会变得非常复杂。

答案 1 :(得分:2)

另一个选择是让每个客户注册谷歌应用程序,然后将您的appengine应用程序添加到他们的应用程序。这样他们就可以管理网址。他们需要为此使用一个cname,所以url将被限制为类似'store.customer.com'的东西你将不得不支持主机头的多租户,但这并不难做到已经有办法支持多租户了。您可能希望自己为前几个客户端进行设置,以便记录最简单的设置方法。

rietveld代码评论应用可以将其添加到您的Google应用领域。有关详细信息,请参阅http://code.google.com/p/rietveld/wiki/CodeReviewHelp#Using_Code_Reviews_with_Google_Apps

首选方案可能是通过Google Solutions Marketplace提供您的解决方案:http://www.google.com/enterprise/enterprise_marketplace/about.html

答案 2 :(得分:0)

我们做了类似Daniel Vassallo的第二个提案。 我们在Heroku云上创建了一个python应用程序 (连接自定义域没有限制)。 这个应用程序使用python请求1.2.0 lib根据请求域从您的应用程序引擎应用程序获取正确的页面。 所有你需要告诉你的客户是将你的Heroku应用程序URL作为他们的CNAME 对于裸域,您可以随时使用wwwizer