我使用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?
答案 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.com
和www.example.com
是不同的Web服务器,并且位于不同的IP地址上。在这种情况下,您将无法在裸域使用SSL,因为裸域上的Web服务器根本不执行SSL,即它不会在端口443上侦听连接,因此您可以获得" Firefox可以" Firefox可以" 39;建立联系"。如果您无法在裸域上使用SSL,则无法对https进行重定向,因为此重定向首先需要建立的SSL连接。