【问题标题】:Heroku, GeoIP, Amazon Route 53Heroku、GeoIP、亚马逊 Route 53
【发布时间】:2015-08-24 10:43:11
【问题描述】:

我开始为我的 Heroku 应用设置 2-Region,然后使用 Amazon Route 53 GeoDNS 服务创建分配工作负载。

解决方案 1 失败

a = api.mydomain.com, Europe, myApp-EU.herokuapp.com
b = api.mydomain.com, US, myApp-US.herokuapp.com

a,b 失败: 因为 Heroku 不知道“api.mydomain.com”。

解决方案 2 失败

a = api.mydomain.com, Europe, CNAME api-eu.mydomain.com
b =  api.mydomain.com, US, CNAME api-us.mydomain.com
c =  api-eu.mydomain.com, Europe, myApp-EU.herokuapp.com
d =  api-us.mydomain.com, US, myApp-US.herokuapp.com

c,d 工作,因为 heroku 知道“api-eu.mydomain.com”。 a,b 不起作用,因为 heroku 不知道“api.mydomain.com”

此时我会得出结论,Herou 不可能?

【问题讨论】:

    标签: amazon-web-services heroku geolocation geoip amazon-route53


    【解决方案1】:

    在 http/s 环境中,两个因素必须结合在一起。 (从问题中可以看出您理解这两个问题,但请在我澄清时放纵我)。

    • 请求主机名必须可直接解析为端点 IP 地址,使用 DNS A 记录,或间接通过 CNAME 记录,

    • 目标必须期待在Host: http 标头中具有原始 主机名的请求。

    Heroku 显然理解应用应支持自定义主机名的概念,例如 eu-app.example.comapi.example.com

    如果他们的系统允许您为这两个应用程序分配相同的主机/域名,问题就会自行解决,因为您将地理 DNS 映射配置到适当的区域 CNAME 目标,它会按预期工作。既然你问了这个问题,我认为情况并非如此。

    根据在 Heroku 上托管对您有多大用处,鉴于这个明显的问题,一个简单且成本相对较低的解决方案将是每个目标区域中的一个 EC2 实例,其唯一目的是接收那些地理路由的请求,重写Host: 标头到 Heroku 期望看到的内容,并反向代理请求。

    我有一个类似的应用程序,其中我有一个具有一个主机名的静态站点,存储在具有不同名称的 S3 存储桶中。对于静态网站托管,S3 要求存储桶名称等于浏览器在 Host: 标头中发送的值,这会阻止来自不同主机名的 CNAME 工作,原因完全相同你在这里看到了。

    代理服务器在 t2.micro 实例上运行 HAProxy,每月不到 10 美元,每天提供数千次点击,几乎不使用 t2.micro 上的任何 CPU(我的信用余额总是超过 100),因为 HAProxy写得很好,并且依赖于资源使用。由于 EC2 机器与 S3 存储桶位于同一区域,因此添加到每个请求的额外延迟是微不足道的。当然,作为额外的奖励,我可以获得实时日志记录、标头捕获以及后端服务性能和行为的外部视角。 Nginx 或 Varnish 或其他几个代理服务器可能用于相同目的。您可以将它们放在部署应用程序的相同区域,但对于一个区域,如果 Heroku 平台直接期待您的 api.example.com,您可以跳过它。从技术上讲,您只需要在一个位置使用它。

    这样做的原因是 HAProxy 不关心传入的 Host: 标头包含什么,除非您将其配置为根据该标头做出路由决策。

    您还可以在所有 HAProxy 实例上加载您的 api.example.com SSL 证书,它会终止 SSL 并使用新的 SSL 连接将请求转发到端点,该端点可以使用任何有效的 SSL 证书,包括任何目标端点可能支持的通配符/非虚荣证书。

    【讨论】:

      【解决方案2】:

      在查看了不同的解决方案后,我想出了如何处理它。 AKAMAI 和 Fastly 是允许您覆盖“http 主机标头”的 2 个 CDN 服务。通过这种方式,Heroku 知道请求来自“api-eu.mydomain.com”,因为 Akamai 能够覆盖“api.mydomain.com”主机头。

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 2015-10-19
        • 1970-01-01
        • 2011-02-18
        • 2014-02-17
        • 1970-01-01
        • 2016-12-22
        • 2014-05-21
        • 2016-11-26
        相关资源
        最近更新 更多