【问题标题】:Rails Application forcing ssl on all calls on HerokuRails 应用程序对 Heroku 上的所有调用强制使用 ssl
【发布时间】:2014-03-28 23:49:33
【问题描述】:

我有一个应用程序,它有一个控制器,其动作被强制 https 和一个异常使用以下代码:

force_ssl except: :show, if: :ssl_configured?

def ssl_configured?
    Rails.logger.debug "ssl configured"
    ENV["ENABLE_HTTPS"] == "yes"
end

在其中一个视图中,我将 url 定义为访问 http 链接:

place_url(place.id, protocol: 'http')

当我在本地服务器上运行它时(使用 NGINX/WEBrick),所有操作都被重定向到 HTTPS,除了仍然不安全的 show 操作。

但是,当我部署到 heroku 时,所有操作都会重定向到安全连接,即使指向地方显示操作的链接显示为 http。

我没有在 Heroku 上做任何配置(除了设置环境变量),所以应用在 WEBrick 服务器上运行。

如何确定 Heroku 上忽略异常的原因?按照Heroku docs 中的建议配置独角兽服务器会更好吗?

【问题讨论】:

  • 会不会是缓存问题?这通常是我看到的那种重定向的误导性问题。
  • 我假设你的意思是浏览器缓存?我很确定不是这样。我已经清除了 Firefox 中缓存的网页内容。我还在返回 ["/app/tmp/cache/assets"] 的控制台上尝试了 Rails.cache.clear (如果这就是你的意思)。两者都没有任何区别。
  • 我在 Heroku 上创建了一个新的应用程序实例,它可以正常工作。这显然解决了我的问题,但我仍然对如何进一步调查原始实例感兴趣。
  • 感谢@adamk33n3r。后来我发现....特别是heroku run bash 允许ls 查看文件,但这些文件是按加载时间计时的。没有内置的文本编辑器,但这个link 注释了一个插件。不过我没试过。
  • @Richbits 我刚试过,效果很好。没有颜色,但可以快速修复。如果你也只是想查看一个文件而不是编辑它,你可以运行cat。这将打印文件。你甚至可以cat file_name.ext | more 并按下回车键和空格键来滚动文件。

标签: ssl heroku ruby-on-rails-4


【解决方案1】:

让您的应用程序在 SSL 之间来回切换是个坏消息,尤其是在用户登录之后。我需要采取额外的预防措施,例如保护 cookie。查看此 Rialscasts 剧集了解模式详情:http://railscasts.com/episodes/357-adding-ssl

通过 SSL 为整个应用程序提供服务会更好。

[/意见]

对于 Heroku,在 Heroku 上启用 SSL 会将应用程序移至安全的测功机。完成后,对该测功机的所有 请求都使用 SSL。我可以确认这种行为。我刚刚将 Devise 和 force_ssl 明确设置为 false 的 vanilla rails 应用程序部署到 Heroku SSL。对此应用程序的所有非 SSL 请求都重定向到 SSL。这是执行此操作的 Heroku SSL dyno 配置,不是应用配置。

同样,在 Heroku SSL 上,所有请求都被重定向到 SSL,而不管应用配置如何。

【讨论】:

    【解决方案2】:

    我遇到了与您类似的问题,使用此方法无法使其在 Heroku 上的 Rails 4 中正常工作。所以我找到并安装了'rack-ssl-enforcer' gem,它与 Heroku 配合得非常好。

    只需安装 gem 并将您想要的任何配置添加到 application.rb 文件。唯一需要注意的是,来自 SslEnforcer 的 :except 配置也有问题,所以我使用 :only 配置并将其设置为正则表达式以在整个站点上强制执行 ssl,正则表达式前瞻“反馈|beta-tester”除外(这些是我不想要 SSL 的路由)。这是我使用的配置:

    config.middleware.use Rack::SslEnforcer, :only => %r{[\/](?!feedback|beta-tester)\S+}, :strict => true
    

    请务必将 :strict 设置为 true,否则当有人从 SSL 页面导航到您的显示页面时,它将使用 SSL,反之亦然以从非 SSL 导航。

    https://github.com/tobmatth/rack-ssl-enforcer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      相关资源
      最近更新 更多