如何在heroku上将所有https流量重定向到Sinatra中的http?

时间:2013-07-10 08:12:46

标签: heroku dns sinatra

我正在尝试使用Sinatra

中的所有https流量重定向到http
  get "*" do
      if request.secure?
        redirect request.url.gsub(/^https/, "http")
      else
        pass # continue execution
      end   
    end

但是,在heroku上的自定义域中,我的浏览器显示错误:

This is probably not the site you are looking for!

You attempted to reach www.[domain].com, but instead you actually reached a server identifying itself as *.heroku.com. 

根据https://devcenter.heroku.com/articles/custom-domains

,我的DNS配置了www子域,其CNAME指向[domain].herokuapp.com

这是DNS问题吗?购买SSL证书是允许所有https流量重定向到http的唯一方法吗?

1 个答案:

答案 0 :(得分:0)

如果您打算使用该代码,那么我会将其设为before过滤器,因为它确实就是这样。

但是,如果您在应用程序层(您的Sinatra应用程序位于Heroku上)收到了请求,那么您需要一个证书,因为HTTP层(处理此问题的Nginx代理服务器所在的位置)已经存在收到请求并将尝试将其作为安全连接处理但由于没有证书而失败/引发错误。如果您尝试通过https URI方案访问非SSL页面/网站,那么这就是您将收到的消息。您仍然可以访问该网站,但用户必须点击可怕的警告。

我知道可能没有证书(但看this answer probably not)工作的唯一方法就是你有权访问Nginx配置并重写URL(和那可能是一些标题。