Rails:为Heroku正确设置DNS,Rack-rewrite等

时间:2012-05-01 08:13:02

标签: ruby-on-rails dns rack-rewrite

我已经浏览了整个互联网,但无法获得最终的解决方案,我希望100%正确设置DNS等,以便在Heroku.com上获得以下结果:

我可以从任何地方获得一些帮助,但没有任何结论可以解决从DNS到机架重写的整个问题,这就是我在这里问的原因(我的注册商和Heroku的支持只能给我“他们的部分“)。

据我所知,需要做的是:

  1. 将mydomain.com和www.mydomain.com添加到Heroku的自定义域

  2. 在我的注册商DNS中将CNAME更改为http://myapp.herokuapp.com问题:使用CNAME重定向到myapp.herokuapp.com会是“www”还是“*”?

  3. 添加“@”DNS记录以处理裸域请求(http://mydomain.com)。由于这不会使用CNAME,我使用https://devcenter.heroku.com/articles/custom-domains处的IP号码,尽管根据文章他们有严重的正常运行时间问题。

  4. - 1-3给我留下了一个网站,该网站将http://mydomain.comhttp://www.mydomain.com同时提供内容http://myapp.herokuapp.com

    ℃。现在,我想将所有内容从http://mydomain.com重定向到http://www.mydomain.com,并且根据Heroku支持,这应该通过rack-rewrite(https://github.com/jtrupiano/rack-rewrite)来完成。使用那里的例子,代码应该是:

    r301 %r{.*}, 'http://mydomain.com$&', :if => Proc.new {|rack_env|
      rack_env['SERVER_NAME'] != 'www.mydomain.com'
    }
    

    然而,这为我创造了一个永恒的循环。

    所以,我现在的问题是:为了实现这种设置,Heroku和DNS设置的正确工作流程是什么?

    要解决这个问题非常困难,因为通过反复试验来尝试不同的DNS设置非常困难(很难知道它们是否已经通过)。

1 个答案:

答案 0 :(得分:5)

这是重写规则我认为它是在说“执行301重定向到'http://mydomain.com $&' (其中$&表示它将保留.com之后的所有内容),但前提是请求中的主机不是'www.mydomain.com'“。

因此,您将进入重定向循环,因为对您的服务器的任何请求中没有www,例如裸体mydomain.com将重定向回mydomain.com。

它可能需要重写为:

r301 %r{.*}, 'http://www.mydomain.com$&', :if => Proc.new {|rack_env|
rack_env['SERVER_NAME'] == 'mydomain.com'}

因此,您要重定向到域名的www版本。

实际上有一个dupe here

修改 这就是我要做的事情:

  1. 删除重定向规则
  2. 设置您的dns,以便www.domain.com和domain.com返回myapp.herokuapp.com
  3. 验证dns是否正常工作而不必担心重定向
  4. 确保在DNS级别,它不会尝试执行一些有用的重定向
  5. 在这个阶段,DNS没有任何其他关系。他们唯一做的就是返回一个IP地址(A记录)或另一个域(CNAME)。然后他们的工作就完成了。

    下一步:

    1. 应用机架重写规则
    2. 服务器可能需要重启 - 只是以防万一
    3. 使用Sam Spade之类的内容进行测试 - 标题将包含301重定向,如果已正常工作,则会包含新位置