Rails强制开启SSL
Rails >= 3.1
如果你的Rails版本大于3.1,那么就非常的简单,只需要使用 config.force_ssl = true
即可,具体代码如下:
# config/application.rb
module MyApp
class Application < Rails::Application
config.force_ssl = true
end
end
当然你也可以设置不同的环境,比如在开发环境关闭SSL,在生产环境打开,可以使用以下方法:
# config/application.rb
module MyApp
class Application < Rails::Application
config.force_ssl = false
end
end
# config/environments/production.rb
MyApp::Application.configure do
config.force_ssl = true
end
默认情况下, Rails使用Rack::SSL Rack middleware 来强制使用SSL
Rails < 3.1
如果你的Rails版本小余3.1,也不用担心,可以手动打开SSL支持,把如下代码加入到环境配置里
config.middleware.insert_before ActionDispatch::Static, "Rack::SSL"
同时别忘了在Gemfile里加入rack-ssl的支持
# Gemfile
gem 'rack-ssl', :require => 'rack/ssl'
同时使用HTTPS和HTTP
以上方法是把全部访问强制重定向到HTTPS,当然,我们也可以并列使用HTTPS和HTTP,Rack::SSL拥有大量没有在文档里的内容,其中一个东西就是:exclude选项,我们可以在环境配置里加入以下配置:
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }
使用该配置以后,如果你使用HTTPS访问网站,它会把所有的资源链接换成HTTPS,当然如果使用HTTP访问,那么什么都不会有变化。
转载请注明来源:http://www.tianwaihome.com/2014/08/rails-force-ssl.html。