如何根据传入域显示不同的内容?

时间:2016-07-13 10:13:12

标签: heroku dns github-pages cloudflare meteor-galaxy

问题

我在这里过头,请指出我是不是想把苹果与面包比较。

我想了解人们如何做这种特殊的模式(或一组模式)对我来说似乎很神奇。

  

注意:下面的具体问题(答案需要解决这个问题)

模式

1。 Galaxy meteor hosting

DNS config中,他们要求我们将www.customer1.com(您)的CNAME设置为galaxy-ingress.meteor.com

这让我感到震惊,他们如何能够根据源域重定向多个站点。其中许多可能是高流量。这也应该是高效的。

2。 Github.com页面

只需在其设置中添加您的域名,然后将CNAME设置为他们为您提供的常量域名。完成。

  

注意:我对细节感到朦胧 - 转发到常量域名或GH pages user domain喜欢user.github.io,不要回忆起来。

3。 Gitlab.com

他们会给你一个知识产权来指出一个A record,但这对我来说似乎没有时间友好。

PS:我喜欢这些家伙,Git + CI + docker repo是免费的,我一定是在做梦。

4。 Heroku的

  1. 通过命令行或通过他们的网络gui添加域。
  2. 将CNAME添加到您的app-name.heroku
  3. 这(就像上面的一些内容)将是最好的,即使没有自定义域,您也可以使用默认的xyz.herokuapp.com网址。

    5。 surge.sh

    1. 将域名添加到名为CNAME的文件中(我很怀疑,最初,这会起作用,它太简单了:))
    2. 将cNAME添加到xyz.surge.sh网址
    3. 6。 Modulus.io

      (我可以继续这个清单)

      具体问题

      我希望基于上面的设置

        • 当www.website1.com与ingress.yourwebsite.com有CNAME时,显示与其网站相关的内容
        • 当www.website2.com与ingress.yourwebsite.com有CNAME时,显示与其网站相关的内容
      1. 网址应显示www.website1.com或www.wesbite2.com而非ingress.yourwebsite.com
      2. 以编程方式添加新网站很容易
      3. 保持高效和正常运行时间
      4. 在IaaS(数字海洋,AWS等)提供商上实施。 (尽管一个答案表明,你可以使用PaaS(Heroku,Modulus等)提供商的API,但是,在这种意义上说,通过这样做,人们不会理解任何事情。因为实现是用API抽象出来的)
      5.   

        效果:我的意思是,如果可以在DNS层完成,那么您不会在应用层中执行此操作。

             

        正常运行时间:我的意思是,如果服务器实例出现故障,此服务将无法停止工作

        奖金

        如何为website1.com和website2.com工作(请注意没有www.)?

        www.website1.com转发到website1.com一样(或根据您的偏好以其他方式)

        我想像谷歌应用程序一样在内部进行设置,我不希望用户在他们的DNS上进行奇特的设置,例如在他们的根目录等CNAME。

        技术偏好

        如果可能,请使用其中一个而不是竞争对手。当你通过这样做做出次优选择时,请提及。

        按顺序:

        1. MeteorJS
        2. 的NodeJS
        3. 的Javascript
        4. Cloudflare.com API
        5. Nginx的
        6. 任何有高星级的github.com回购(比如说,1k +)
        7. PS:我提到这个偏好并不是他的意思,而是重复使用我已经知道的东西。

          可能的解决方案(我不是在寻找):

          • iframes(糟糕的SEO等)
          • mod_rewrite(github和其他人使用mod_rewrite,似乎app级别和kludgy)

          更新#1(2016年7月13日)

          我尝试了什么

            • 使用自定义域(例如xyz.com)将meteorJS应用程序部署到heroku并尝试以编程方式路由a.xyz.com等,得到像herokuapp这样的域中存在的错误。
            • 阅读了很多关于hoerku的通配符域但没有帮助
            • 使用自定义域名(例如xyz.com)将meteorJS应用程序部署到meteor.com并尝试以编程方式路由a.xyz.com等,得到的错误就像流星应用程序在该域中不存在。
            • 他们无法访问DNS(我认为需要工作的地方)
            • meteor.com免费托管已关闭
            • 我猜这应该比缠绕在一起的纱线球更容易,我想做到这一点。
            • 如果我可以通过编程方式设置CNAME s(使用cloudflare.com API,这可能在其他地方吗?),例如website1.yourwebsite.com,那么当某人点击website1.yourwebsite.com时,我应该知道要投放的内容基于URL(应用程序级别)然后我可以301 redirect到实际主机?该网址在301 redirect上发生了变化。党!
          1. 更新#2(2016年7月30日)

              • 更新了问题以澄清这需要在IaaS(数字海洋,AWS等)上实施。如果您正在使用PaaS(Heroku,Modulus等)提供商的API,您仍然不知道该模式是如何实现的,它已经被API抽象出来。

1 个答案:

答案 0 :(得分:1)

作为Modulus的员工,我可以提供一些洞察力,了解其工作原理。或者至少它如何在Modulus平台上运行。

我们使用传入的host header / SNI来了解将流量路由到哪个项目。我们有负载平衡器 - >主机 - >伺服系统。当您的应用程序发出请求时,它会点击我们的负载均衡器,它具有静态IP地址(或多或少)。我们的负载均衡器在内存数据库中执行主机查找,以查找应用程序的位置。负载均衡器将请求路由到项目所在的主机,然后路由到项目所在的确切伺服。一个响应来自应用程序,它从伺服回到主机,然后回到负载平衡器,负责平衡器检查一些事情(比如是否为您的项目设置了SSL),然后响应离开负载均衡器并返回到访问您的应用的人。当您查看模数项目仪表板上的项目指标“指标”部分时,“响应时间”图表显示了为您的应用指定路线发生此流程所需的时间。

当您将自定义域放入混合中时,其工作原理基本相同。您设置DNS以使用“A记录”将您的域解析为我们的负载均衡器。您也可以使用CNAME,但我认为A记录效果最佳。使用A记录,您可以定义所有流量首先路由到哪个负载均衡器。这可能会影响像x-forwarded-for这样的事情。您可以在我们的服务here上详细了解如何使用自定义域名。我们可以更深入地了解这一部分,但在“自定义域名”文章中对此进行了详细解释。

关于以编程方式设置项目/应用程序的问题,最好为每个应用程序/网站设置单独的项目。那将是最简单的。您可以创建一个以编程方式创建具有自定义域的其他项目的单个项目,但您必须对我们的CLI进行反向工程,或者等到我们发布公共API(这应该在几个月后发生)。

如果您想对CLI进行逆向工程,可以通过分析我们的开源here来实现。您必须首先执行$ modulus token create在CLI中创建令牌,然后您可以使用它来向https://api.onmodulus.net/<XYZ or project etc>?create&authToken=<authToken goes here>发送API请求

如果您想聊聊更多,可以随时在Meteor Chef Slack小组中找到我,您可以加入here

我希望这些基本信息可以为您解决这个问题提供一些方向。 :)