ruby-on-rails - Ruby on Rails Thin 和 force_ssl,通过 HTTP 的空响应

标签 ruby-on-rails ruby ssl

我最近在 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/

相关文章:

ssl - Nginx certbot SSL 不适用于 Cloudflare

ruby-on-rails - 在特定于环境的配置文件中配置未定义

ruby-on-rails - 我如何告诉 Rails 如何正确地大写首字母缩写词?

ruby-on-rails - ActiveSupport::Duration hours/minutes/seconds 总是秒?

ssl - meteor / Apollo : SSL Access for HTTPS and WS?

ruby-on-rails - 您如何从需要凭据 (SSL) 的网站上抓取数据?

javascript - 用 rails 配置 Angular 材

ruby-on-rails - Ruby 2.4.1 - 警告:constant::Fixnum 已弃用

ruby-on-rails - Ruby 顶级常量加载问题

ruby - 如何在单独的 Ruby 进程之间传递 Selenium WebDriver 对象?