Ale*_*ger 6 ssl ruby-on-rails amazon-web-services
我想用 SSL 运行我的整个 Rails 应用程序,所以我想使用 Rails 的全局 force_ssl 配置选项,这很好用,除了 ELB 的健康检查器永远不会工作,因为如果我将它设置为 http,Rails 将转发到 https 301,健康检查将失败,因为它不是 200。如果我将其设置为 https,nginx/rails 将无法处理请求,因为 SSL 由 ELB 处理,而 nginx/rails 仅处理 HTTP。
我的非理想解决方案是对global force_ssl
健康检查页面进行例外处理,但 Rails 的global force_ssl
配置始终覆盖 ,force_ssl :except => :health_check
因此似乎不起作用。
另一种解决方案是不使用ELB进行SSL终止,并设置HAProxy左右,但我想尽可能多地使用亚马逊的基础设施,更多地关注项目的核心开发而不是基础设施。
这是我的第一篇 serverfault 帖子,所以我很感激我能得到的任何帮助(或我可以提供的更多信息)。谢谢。
更新:
到目前为止,我通过让 ELB 通过与 80 不同的端口访问 EC2 实例来“解决”这个问题,该端口只有它可以访问,这感觉很极端,但在应用程序层和服务器层之间保持分离。如果健康检查请求来自来自该端口的 ELB,nginx 将转发设置为“https”的 X-Forwarded-Proto 标头,这会让 Rack 认为它来自 SSL,并让它通过。对于通过标准端口 80 传入的所有其他流量,它只转发 ELB 给出的 X-Forwarded-Proto 标头,它将准确报告外部用户正在使用的内容,并让 Rails 决定是否强制使用 https。
仍在等待更清洁的解决方案,但这就是我所拥有的。
小智 5
6 个月后,这是您的清洁解决方案。
# config/environments/production.rb
config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/health_check') } }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1885 次 |
最近记录: |