强制在欧盟地区运行的Heroku应用程序使用SSL

时间:2014-12-09 11:05:27

标签: ruby-on-rails ssl heroku https dns

我正在努力为在Heroku(欧盟地区)上运行的rails应用强制执行SSL连接。

我已成功将cert(包含Heroku SSL加载项)添加到自定义域(如果我明确声明https://..com它可以正常工作)

但我想将所有http请求重定向到https连接。

对于美国地区的应用,这需要将自定义域DNS记录指向.herokussl.com NOT .herokuapp.com。文档:https://devcenter.heroku.com/articles/ssl-endpoint#dns-and-domain-configuration

对于欧盟地区的应用,自定义DNS记录仍应指向.herokuapp.com,默认情况下似乎不会强制执行SSL连接。

因此,我的问题是:如何让我在欧洲运行的Heroku应用程序的所有连接都被迫通过SSL运行?

2 个答案:

答案 0 :(得分:26)

production.rb

Rails.application.configure do
    config.force_ssl = true
end

这会将所有http流量重定向到https

编辑:值得注意的是,这是一个Rails而不是一个heroku。

修订:

由于这个答案/问题经常被看到并被投票,因此在每个请求的控制器中也可以这样做:

class AccountsController < ApplicationController
  force_ssl if: :ssl_configured?

  def ssl_configured?
    !Rails.env.development?
  end
end

答案 1 :(得分:1)

仅供参考,您的问题提及herokussl.com,这是已弃用的Heroku SSL Endpoint服务的一部分。 Heroku现在建议使用Heroku SSL服务:

  

仅当您需要支持不支持SNI的旧版浏览器客户端时,才建议使用SSL端点附加组件。我们的默认建议是使用this document中描述的Heroku SSL。

另请注意,appname.herokuapp.com域已启用SSL,可以使用https进行访问,例如https://appname.herokuapp.com