ssl - Rails 应用程序在 Heroku 上的所有调用上强制使用 ssl

标签 ssl heroku ruby-on-rails-4

我有一个应用程序,它有一个 Controller ,该 Controller 具有强制为 https 的操作和一个使用以下代码的异常:

force_ssl except: :show, if: :ssl_configured?

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

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

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

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

然而,当我部署到 heroku 时,所有操作都重定向到安全连接,即使到 place show 操作的链接显示为 http。

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

我如何确定异常在 Heroku 上被忽略的原因?我会更好地按照 Heroku docs 中的建议配置 unicorn 服务器吗? ?

最佳答案

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

只需安装 gem 并将您想要的任何配置添加到您的 application.rb 文件中。唯一需要注意的是 SslEnforcer 的 :except 配置也有问题,所以我使用了 :only 配置并将其设置为正则表达式以在整个站点上强制执行 ssl,除了正则表达式前瞻“反馈|测试版” (这些是我不想要 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

关于ssl - Rails 应用程序在 Heroku 上的所有调用上强制使用 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036503/

相关文章:

html - Bootstrap - 自定义闪光灯/警报框

javascript - 如果模型是基于 Ruby on Rails 4 上的单表继承创建的,如何制作下拉列表

java - 证书在不同的机器上显示不同的证书链

PHP cURL https 不适用于新的 VPS

apache - Collabora (docker) 和 NextCloud (snap) 问题在同一台机器上的代理后面

node.js - 在 Heroku 和 Node.js 上扩展 websocket

python - Heroku 不再支持 Celery 了吗?

ruby-on-rails-4 - 使用密码保护 Rails 中的单个页面

docker - 在 Docker Swarm 中安装 SSL 证书

ruby-on-rails - Heroku 和 Postgresql 和 Rails - 连接错误太多