我有一个应用程序,它有一个 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 导航。
关于ssl - Rails 应用程序在 Heroku 上的所有调用上强制使用 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036503/