【问题标题】:Rails: Proper setup with DNS, Rack-rewrite etc for HerokuRails:为 Heroku 正确设置 DNS、Rack-rewrite 等
【发布时间】:2012-05-01 08:13:01
【问题描述】:

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

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

据我了解,需要做的是:

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

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

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

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

c。现在,我想将所有内容从 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 设置非常困难(很难知道它们是否已经通过)。

【问题讨论】:

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


    【解决方案1】:

    这是重写规则我认为它是在说“执行 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 级别它不会尝试进行一些有用的重定向

    在这个阶段,与 DNS 没有任何关系。他们唯一要做的就是返回一个 IP 地址(A 记录)或另一个域(CNAME)。然后他们的工作就完成了。

    下一个:

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

    【讨论】:

    • 谢谢,这对重定向问题有所启发。关于副本,我也测试过那个,但可能是因为我的 DNS 设置,我无法让它工作。这就是为什么我想对它采取“完整”的方法,因为 DNS 设置也会影响这一点,而且(对我来说)很难理解什么在做什么。
    • ...哦,这实际上也会为我创建一个无限循环。不知道是不是因为我的 DNS 设置,但还是不行。
    • 使用 Sam Spade、Fiddler 和基本 ping 等工具来解决问题是与 DNS 还是您的 Web 应用程序有关。如果 DNS 正在返回适当的域/IP,那么它可能不是 DNS 问题。
    • 我需要在 add rack_env['SERVER_NAME'] == 'www.mydomain.com' 处使用“www”,但这使它起作用。谢谢。
    猜你喜欢
    • 2012-11-26
    • 2012-12-28
    • 2023-03-15
    • 2013-11-25
    • 1970-01-01
    • 2017-03-01
    • 2020-05-19
    • 2021-11-16
    • 2018-02-07
    相关资源
    最近更新 更多