2016-06-10 16 views
0

最近我在CentOS 7.x上使用Thin作爲Web服務器和Comodo的SSL證書,我已經設置了幾個Ruby on Rails服務器。Ruby on Rails瘦和force_ssl,HTTP上的空響應

我已經啓用了我的config/environments/production.rb文件force_ssl選項,我跑我的服務器用命令:

RAILS_ENV=production thin start -a <IP> -p 3000 --ssl --ssl-key-file <KEY FILE PATH> --ssl-cert-file <CERT FILE PATH>

我使用的設計,所以在config/initializers/devise.rb我設置

config.rememberable_options = { secure: true }

我還在config/initializers/session_store.rb中設置了一些配置

Rails.application.config.session_store :cookie_store, key: '_secure_<domain>_session', httponly: true, secure: true

當我第一次通過HTTP從互聯網瀏覽器訪問我的服務器時,我收到一個空的響應消息(經過多個瀏覽器和多臺計算機的測試)。當我直接通過https訪問它時,它解決了問題(SSL完美地工作),當我下次嘗試訪問http時,它重定向就好了。我不確定我可以使用nginx或Apache來修復這個問題。

下面是我讀過的其他問題:

回答

1

薄只能聽一個端口上,只能服務於每SSL或者非SSL請求實例。當瘦客戶端以--ssl啓動時,它會嘗試將入站連接作爲TLS連接進行處理,並將丟棄它無法協商的那些(即純HTTP請求)。

您需要使用nginx(或其他反向代理)監聽多個端口並終止SSL,然後轉發至Thin。否則,您將需要運行多個Thin實例,一個服務於SSL,另一個不是。

+0

說得好。你應該在Nginx上做。 – emrahbasman

+0

這是我的想法,非常感謝您的回覆。 爲了記錄,我使用iptables預路由將端口80和端口443上的連接轉發到端口3000.一旦您通過HTTPS訪問服務器一次,它就可以通過HTTP工作,但不是第一次(在給定的瀏覽器中)。 我將設置nginx。謝謝! – Mator