多个域通过显示不同内容的名称服务器指向单个Heroku Rails应用程序?

时间:2011-06-15 16:21:25

标签: ruby-on-rails heroku

我们有一个Rails 3应用程序,允许用户创建配置文件并使用子域访问它。例如:

  • user1.app.com
  • user2.app.com
  • user3.app.com

现在,假设他们想将自己的域名指向他们的个人资料,因此 www.user1.com 会显示 user1.app.com www .user1.com / my-content / 显示 user1.app.com/my-content / 。他们是否可以简单地更改他们的名称服务器以指向我们,我们处理路由?如果用户不仅要更改其名称服务器而必须进行任何DNS配置,我担心这将是一个交易破坏者。

谢谢!

2 个答案:

答案 0 :(得分:15)

这实际上是两个问题。 所以我想我会这样回答。

如何允许客户向我的基于heroku的应用添加自定义域?

因此,在您的示例中,他们的域名为www.user1.com

需要做两件事

  1. www.user1.com需要添加到您应用的heroku域
  2. www.user1.com的dns需要设置为heroku服务器
  3. 为了添加这个新域名,我想你需要在应用程序中存储自定义域名, 当它被更改或创建时,确保设置排队任务以将此配置更改推送到heroku。

    为了正确执行dns,我希望他们为CNAME添加user1.app.com就足够了。 因此,如果您有一个链接到heroku的dns的通配符CNAME,则可以避免在Heroku再次进行DOS操作时可能发生的停机类型。

    如何基于域显示内容,而不仅仅是子域?

    嗯,不知怎的,你已经将user1.app.comuser2.app.com

    区分开来了

    也许你只是嗅了request.host。 现在,您只需先尝试自定义域名。

    也许这会起作用。

    before_filter :set_client
    
    def set_client
      @client = Client.find_by_custom_domain(request.host) || Client.find_by_subdomain(request.host.split(".").first)
      unless @client
        raise "unrecognised domain #{request.host}"
      end
    end
    

答案 1 :(得分:12)

首先需要让他们让他们设置www.user1.com指向proxy.heroku.com(或者设置你自己的cname条目到proxy.heroku.com并让他们将域名命名为)然后你需要用你的heroku应用程序注册他们的自定义域名,以便正确的应用程序响应他们的帐户存储的Heroku?在你的应用程序中,它可以匹配传入的请求。

这种技术在Locomotive Rails CMS中使用,所以我建议看一下 - 它使用Heroku gem INSIDE 应用程序,因此可以通过站点管理员添加自定义域,然后进行会谈到Heroku API将自定义域添加到应用程序。