我最近在 CentOS 7.x 上设置了几个 Ruby on Rails 服务器,使用 Thin 作为 Web 服务器和来自 Comodo 的 SSL 证书。
我已经启用了 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
当我第一次从 Internet 浏览器通过 HTTP 访问我的服务器时,我收到一条空的响应消息(已使用多个浏览器和多台计算机进行测试)。当我直接通过 https 访问它时,它解析得很好(并且 SSL 工作正常),当我下次尝试通过 http 访问它时,它重定向就好了。我不确定如何使用 nginx 或 Apache 修复此栏。
以下是我读过的其他问题:
最佳答案
Thin 只能监听一个端口,并且每个实例只能服务于 SSL 或非 SSL 请求。当使用 --ssl
启动 thin 时,它会尝试将入站连接作为 TLS 连接进行处理,并将丢弃那些它无法协商的连接(即纯 HTTP 请求)。
你需要使用nginx(或其他一些反向代理)来监听多个端口并终止SSL,然后转发给Thin。否则,您将需要运行多个 Thin 实例,一个提供 SSL,另一个不提供。
关于ruby-on-rails - Ruby on Rails Thin 和 force_ssl,通过 HTTP 的空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37755052/