2

按照此处为 Rails 3.2.x 更新的指南,我希望能够将 Rack::SSL 配置为仅在包含https://前缀时才使用 SSL 过滤器:

config.force_ssl = true
config.ssl_options = { :exclude => proc { |env| puts 'here? ' + env.to_s; env['HTTPS'] != 'on' } }

但是,https有效,其中http失败并出现以下错误:

[2012-10-29 15:37:03] ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=SSLv2/v3 read client hello A: http request
    /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/openssl/ssl-internal.rb:164:in `accept'

插入到 lambda 中的诊断代码不会被执行。如何在 Rails 3.2.x 中配置 Rack:SSL 以同时响应 HTTP 和 HTTPS?

Rails 3.2.8,WEBrick 使用自签名证书配置 SSL。

4

3 回答 3

2

由于某种原因,自 2012 年 5 月起,在哈希中 使用该exclude选项的功能已被删除: https ://github.com/rails/rails/pull/5515options

我看到的错误是红鲱鱼。被exclude忽略并且请求在ActionDispatch::SSLhttp://中被重定向到. 由于协议不匹配,OpenSSL 然后窒息(我假设)。https://

解决方案是按照此处的建议使用rack-sslgem 。这与 ActionDispatch::SSL 基本相同,只是该选项仍然受到尊重。exclude

于 2012-11-30T23:13:40.740 回答
2

类似的方法rack-ssl是使用rack-ssl-enforcer,配置如下:

# config/environments/production.rb
config.middleware.use Rack::SslEnforcer, :except => ['/heatlh_check', %r{^/public/}]
于 2013-12-23T20:36:07.143 回答
0

经过几天与配置等的角力,我发现了这个伟大的宝石:

https://github.com/lserman/aws-healthcheck

不需要任何自定义 nginx 设置(它通过机架工作)。它200在 /healthcheck 上返回,这就像一个魅力。只需将其添加到您的宝石中即可。

于 2017-03-24T20:58:46.157 回答