如何确保将HTTPS根域请求重定向到Heroku的www

时间:2015-04-12 12:18:00

标签: ssl heroku dns

我使用Heroku的通配符证书为我的Rails 4.2项目提供了用户子帐户的子域名。我已经完美地完成了它,但有一些问题需要解决。

如果我在浏览器中输入http://example.com,则会将其重定向到https://www.example.com并解决问题。

然而如果我输入https://example.com,我会在浏览器中显示以下内容

  

无法连接。   Firefox无法与服务器建立连接   在mydomain.com。该网站可能暂时不可用或也是   忙。片刻之后再试一次......

这些是我的DNS设置

@ ----> http://www.example.com URL-REDIRECT(这是故意的 - Heroku不能使用带有SSL的裸域)

www ----> blahblah-1234.herokussl.com CNAME

子域

* ----> blahblah-1234.herokussl.com。 CNAME

以及DNS' url-redirect'上面提到我还配置了rails来重写rootdomain请求。 (我不认为这个要求甚至会击中铁路)

我创建了一个中间件来重写请求' example.com'到www.example.com'然后将插入之前 ActionDispatch :: SSL

class RootToWWW
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    if request.host.starts_with?('myexample.com')
      [301, {"Location" => request.url.sub("//", "//www.")}, self]
    else
      @app.call(env)
    end
  end

  def each(&block)
  end
end 


# in production.rb
config.middleware.insert_before 'ActionDispatch::SSL', 'RootToWWW'

任何人都可以解释我如何确保对根域的https请求被重定向到www?

1 个答案:

答案 0 :(得分:1)

  

Firefox无法建立连接

这意味着它无法与服务器example.com上的端口443建立TCP连接。在example.com提供的IP地址上没有为此域运行的SSL服务器,或者防火墙阻止连接。

  

这些是我的DNS设置

     

@ ----> http://www.example.com URL-REDIRECT(这是故意的 - Heroku不能使用带有SSL的裸域)

网址重定向实际上不是DNS,但它需要在example.com处拥有一个Web服务器,然后将HTTP重定向到www.example.com。根据你的评论,Heroku无法在裸域上处理SSL我建议,example.comwww.example.com是不同的Web服务器,并且位于不同的IP地址上。在这种情况下,您将无法在裸域使用SSL,因为裸域上​​的Web服务器根本不执行SSL,即它不会在端口443上侦听连接,因此您可以获得" Firefox可以" Firefox可以" 39;建立联系"。如果您无法在裸域上使用SSL,则无法对https进行重定向,因为此重定向首先需要建立的SSL连接。