我有一个应用程序运行在Heroku在两个地区,欧盟和我们。比如说: myapp-eu.herokuapp.com和myapp-us.herokuapp.com。
我想建立一个地理定位dns,当用户访问我们的网站在www.myapp.com最近的区域。
到目前为止,我所做的是使用Amazon 53来建立2 CNAME记录:
但是Heroku不接受相同的CNAME在两个不同的应用程序中使用。
有人已经成功地建立了与Heroku一起工作的geo吗?
谢谢!
发布于 2016-02-29 17:29:46
我打算用HAProxy发布解决方案,我想我以前在这里已经给出了答案(尽管搜索没有打开)。
考虑到Heroku的全局应用程序名称空间限制,这种方法(或者类似的方法,您也可以使用清漆或nginx)将是唯一可行的方法,因为没有DNS服务能够完成您想做的事情--仅靠DNS配置无法完成主机头重写。请求必须通过某种可以在飞行中重写报头的系统。
但是,您只需要一个代理,而不是两个代理。原因如下:
如果主机名是myapp.example.com,那么配置US部署,以简单地期望主机名。
然后,不要将EU部署配置为期望一个自定义主机名;您将使用非虚名主机名myapp-eu.herokuapp.com。
路由53将被配置为返回Heroku端点作为美国查询的答案,以及欧盟请求的代理端点。代理将将主机头重写为myapp-eu.herokuapp.com,并将请求发送到Heroku端点,但美国请求将直接发送到Heroku端点,后者将期望客户机已经使用的主机名。
您还可以避免使用代理,而是使用CloudFront作为代理。请注意,由于CloudFront的全局配置限制,此解决方案只适用于两个目的地--美国和欧盟-- (对于给定的传入主机名只能配置一个CloudFront发行版).但是对于这个解决方案,1是我们所需要的。一个目的地(US)使用直接连接,不需要重写,而另一个目的地(EU)通过CloudFront代理并获得重写。
创建一个CloudFront发行版。将其配置为期待对myapp.example.com的请求。将其配置为使用非虚荣心Heroku EU端点主机名( myapp-eu.herokuapp.com )作为它的自定义源服务器,而不将其配置为从原始请求中白名单主机头。白名单任何其他你需要的标题。或者,禁用缓存。然后,CloudFront将Host:头从myapp.example.com重写到配置的Origin主机名,后者将是EU端点。
然后,像前面一样,将路由53配置为返回美国Heroku端点CNAME,用于来自应该到美国端点的位置的请求,但对于来自应该到达欧盟端点的位置的请求,则返回CloudFront dxxxxxxxx.cloudfront.net CNAME。
无论哪种方式,您都需要支付发送到通过代理或CloudFront的端点的传输费用,因此您可能希望将其用于期望看到较低流量的端点.所以你可能想要在上面的例子中转换欧盟和美国,它们任意地假设美国会看到更多的流量,所以它直接的路线。
这两个解决方案都不应该为请求增加重要的往返时间。如果您选择代理路由,您可能会发现一台非常小的机器,比如t2.microor t2.nano,可以处理您可能期望的更多通信量,因为处理量很小。
https://serverfault.com/questions/760265
复制相似问题