Har*_*tty 33 ssl ruby-on-rails heroku
我正在尝试为我的heroku应用程序设置SSL.我使用的是基于主机名的SSL插件.heroku 文档说明如下:
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.
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,当我使用www子域访问网站时,一切都运行良好,即https://www.foo.com.当我访问https://foo.com时,浏览器会抱怨,因为提供的证书是针对heroku.com的.
我得出结论,我必须将foo.com的流量重定向到www.foo.com以解决此问题.我正在考虑以下方法:
1)基于DNS的重定向
该DNS提供商Zerigo 支持的重定向记录.我在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
Run Code Online (Sandbox Code Playgroud)
2)基于机架的重定向
添加基于机架的中间件以执行重定向.该规范的主机宝石提供这样的支持.
use CanonicalHost do
case Rails.env.to_sym
when :staging then 'staging.foo.com'
when :production then 'www.foo.com'
end
end
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的解决方案(除非转换为每月100美元的基于IP的SSL)
Bri*_*ong 40
哇...这让我永远,网上的一堆信息都是错的.即使Heroku的文档似乎也没有表明这是可能的.
但是Jesper J的回答提供了一个正确方向的暗示:它与DNSimple的ALIAS记录一起使用,我想这是他们创建的一种新的DNS记录.我不得不将我的DNS服务切换到它们只是为了获得这种记录类型(以前使用EasyDNS).
澄清何时我说"工作"我的意思是:
它适用于以下所有网址(将它们重定向到https://foo.com,没有任何警告)
总结重要的一点.
ALIAS指向foo.comheroku ssl端点的记录,例如waterfall-9359.herokussl.comwww.foo.comheroku ssl端点的CNAME记录,waterfall-9359.herokussl.com在production.rb集合中
config.force_ssl = true
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
这最终似乎有效!关键部分似乎是ALIASdns记录.如果有人知道,我会很好奇地了解它是如何工作的,以及它是多么可靠/成熟.似乎可以做到这一点.
DNSimple提供ALIAS记录类型来满足此需求.您可以从指向CNAME的根域(也称为区域顶点)创建别名.在这里阅读更多相关信息:
http://blog.dnsimple.com/introducing-the-alias-record/
| 归档时间: |
|
| 查看次数: |
7401 次 |
| 最近记录: |