ruby-on-rails - 根域上的 Heroku SSL

标签 ruby-on-rails ssl heroku

我正在尝试为我的 heroku 应用程序设置 SSL。我正在使用基于主机名的 SSL 附加组件。 heroku documentation说明如下:

Hostname based SSL will not work with root domains as it relies on CNAME 
aliasing of your custom domain names. CNAME aliasing of root domains is 
an RFC violation. 

正如预期的那样,当我使用 www 子域(即 https://www.foo.com)访问网站时一切正常。 。当我访问 时浏览器提示 https://foo.com 因为出示的证书是针对 heroku.com 的。

我得出结论,我必须将 foo.com 的流量重定向到 www.foo.com 以解决此问题。我正在考虑以下方法:

1) 基于 DNS 的重定向

DNS 提供商 Zerigo supports 重定向 记录。我遇到了 question关于 SO 的类似主题。我尝试了该解决方案,它仅适用于 HTTP 重定向(Zerigo 文档证实了这一点)。

我的 Zerigo 配置:

foo.com      A             x.x.x.x
foo.com      redirect      http://www.foo.com
www.foo.com  CNAME         zzz.amazonaws.com

2) 基于机架的重定向

添加一个基于机架的中间件来执行重定向。 canonical-host gem 提供了这样的支持。

use CanonicalHost do
  case Rails.env.to_sym
    when :staging     then 'staging.foo.com'
    when :production  then 'www.foo.com'
  end
end

我想知道是否有更好的解决方案(除非切换到每月 100 美元的基于 IP 的 SSL)

最佳答案

哇...这花了我很长时间,网上的一堆信息都是错误的。甚至 Heroku 的文档似乎也没有表明这是可能的。

但 Jesper J 的回答提供了正确方向的提示:它与 DNSimple 的 ALIAS 记录一起工作,我猜这是他们创建的某种新型 DNS 记录。我不得不将我的 DNS 服务切换到他们那里才能获得这种记录类型(以前使用 EasyDNS)。

澄清一下,当我说“有效”时,我的意思是:

  • 使用您的根域在 SSL 上访问整个网站
  • 没有浏览器警告
  • 使用 Heroku 的端点 SSL 产品(20 美元/月)

它适用于所有以下 url(将它们重定向到 https://foo.com,没有警告)

总结重要部分。

  1. 将您的 DNS 移至 DNSimple(如果有人知道其他提供 ALIAS 记录的提供商,请将其张贴在评论中,他们是我唯一能找到的提供商)
  2. 正常设置 Heroku 端点 ssl https://devcenter.heroku.com/articles/ssl-endpoint
  3. 返回 DNSimple,添加一个 ALIAS 记录,将 foo.com 指向您的 heroku ssl 端点,类似于 waterfall-9359.herokussl.com
  4. 同时将指向 www.foo.com 的 CNAME 记录添加到您的 heroku ssl 端点 waterfall-9359.herokussl.com
  5. 最后在您的 Rails(或其他)应用程序中进行以下设置:

production.rb中设置

config.force_ssl = true

application_controller.rb中添加

before_filter :check_domain

def check_domain
  if Rails.env.production? and request.host.downcase != 'foo.com'
    redirect_to request.protocol + 'foo.com' + request.fullpath, :status => 301
  end
end

这似乎终于奏效了!关键部分似乎是 ALIAS dns 记录。如果有人知道,我很想了解更多关于它是如何工作的,以及它有多可靠/成熟。不过似乎可以解决问题。

关于ruby-on-rails - 根域上的 Heroku SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701549/

相关文章:

ruby-on-rails - 如果 config.assets.compile = false,为什么我的 Rails 应用程序无法在生产环境中运行?

python - 将静态 Assets 从本地机器部署到 heroku - 无法打开文件 'manage.py' : [Errno 2] No such file or directory

python - Celery 任务完成后未释放 Redis 连接

ruby-on-rails - 当我运行 rake assets :precompile got couldn't find file 'jquery' in application. js on//= require jquery

javascript - Bootstrap-tourtour.init 不是一个函数

python - pip TLS/SSL,但是Python中的ssl模块不可用问题

java - SOA 客户端握手错误

javascript - 将基于 JavaScript/HTML 的应用程序上传到 Heroku

javascript - 如何在 Rails 中将 javascript/jQuery 设置从一个页面传递到另一个页面?

android - Charles ssl证书下载失败 "due to network failures"