遵循针对Rails 3.2.x更新的指导here,我希望只有在包含https://
前缀时才能配置Rack :: SSL才能使用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,使用自签名证书为SSL配置WEBrick。
答案 0 :(得分:2)
自2012年5月起,exclude
哈希中使用options
选项的功能已被删除,原因如下:https://github.com/rails/rails/pull/5515
我看到的错误是红鲱鱼。 exclude
被忽略,http://
请求被重定向到ActionDispatch::SSL到https://
。然后OpenSSL因为协议不匹配而窒息(我假设)。
解决方案是使用rack-ssl
gem,如建议here。这与ActionDispatch :: SSL基本相同,只是仍然遵守exclude
选项。
答案 1 :(得分:2)
与rack-ssl
类似的方法是使用rack-ssl-enforcer,配置如下:
# config/environments/production.rb
config.middleware.use Rack::SslEnforcer, :except => ['/heatlh_check', %r{^/public/}]
答案 2 :(得分:0)
经过几天的摔跤与配置等,我发现了这个伟大的宝石:
https://github.com/lserman/aws-healthcheck
无需任何自定义nginx设置(通过机架工作)。它在/ healthcheck上返回200
,就像魅力一样。只需将它添加到您的宝石中即可完成。