Ruby on Rails Thin和force_ssl,HTTP上的空响应

时间:2016-06-10 18:31:57

标签: ruby-on-rails ruby ssl

我最近在CentOS 7.x上使用Thin作为Web服务器和Comodo的SSL证书设置了几个Ruby on Rails服务器。

我在force_ssl文件中启用了config/environments/production.rb选项,并且我使用以下命令运行我的服务器:

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从Internet浏览器访问我的服务器时,我收到一条空的响应消息(使用多个浏览器和多台计算机进行测试)。当我通过https直接访问它时,它解析得很好(并且SSL工作正常),当我接下来尝试通过http访问它时重定向就好了。我不知道如何使用nginx或Apache修复此栏。

以下是我读过的其他问题:

1 个答案:

答案 0 :(得分:1)

Thin只能在一个端口上侦听,并且每个实例只能提供SSL或非SSL请求。当使用--ssl启动精简时,它会尝试将入站连接作为TLS连接进行处理,并将删除它无法协商的连接(即,纯HTTP请求)。

您需要使用nginx(或其他一些反向代理)来侦听多个端口并终止SSL,然后转发到Thin。否则,您需要运行多个Thin实例,一个提供SSL,另一个不提供。