2015-04-12 33 views
1

我爲我的Rails 4.2項目使用Heroku的通配符證書,該項目爲其帳戶提供用戶子域。我已經完成了它幾乎完美的工作,但有幾個扭曲要解決。如何確保HTTPS根域請求被重定向到Heroku的www

如果我在瀏覽器中輸入http://example.com,它會被重定向到https://www.example.com並解決問題。

然而如果我型我https://example.com得到我的瀏覽器

無法連接下面。 Firefox無法建立到mydomain.com上的服務器 的連接。該網站可能會暫時無法使用或者太忙 。在稍後再試....

這些都是我的DNS設置

@ ---->http://www.example.com URL重定向(這是故意的 - 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

似乎這是與http://stackoverflow.com/questions/37766864/godaddy-with-heroku-not-running-https-for-non-www-domain,這個問題的解決方法是什麼? –

回答

1

火狐無法建立連接

這意味着它不能建立服務器example.com上的TCP連接到端口443。在爲example.com提供的IP地址上沒有爲該域運行SSL服務器,或防火牆阻止該連接。

這些都是我的DNS設置

@ ---->http://www.example.com URL重定向(這是故意的 - Heroku上不能使用明火的域使用SSL)

網址重定向是不是真的一個DNS的東西,但它需要一個網絡服務器example.com然後做一個HTTP重定向到www.example.com。根據您的評論,Heroku無法在裸露域名上處理SSL,我建議,example.comwww.example.com是不同的Web服務器,並且位於不同的IP地址。在這種情況下,您將無法在裸域中使用SSL,因爲裸域上​​的網絡服務器根本不會執行SSL,即它不會在端口443上偵聽連接,因此您會得到「Firefox無法建立連接」。如果你不能在裸域上使用SSL,你也不能爲https做重定向,因爲這個重定向首先需要一個建立的SSL連接。

+0

謝謝史蒂芬對我的問題做出瞭如此清晰的解釋。我會用heroku thr確認以上是否如此。再次感謝。 – robodisco

+1

那麼這個問題的解決方案是什麼,你有沒有找到任何解決方法? –

相關問題