【问题标题】:Enabling SSL on Rails 4 with AWS Load Balancer Ngnix and Puma使用 AWS 负载均衡器 Nginx 和 Puma 在 Rails 4 上启用 SSL
【发布时间】:2016-05-12 23:45:03
【问题描述】:

我尝试为我的项目配置 SSL 失败。

我的 AWS 负载均衡器配置正确并接受证书密钥。我已将侦听器配置为将端口 80 流量和端口 443 流量都路由到实例上的端口 80。

我认为不需要对实例(Nginx 和 Puma)进行进一步修改,因为所有内容都路由到实例上的端口 80。我已经看到了在实例上安装证书的示例,但我知道负载均衡器是 SSL 终止点,所以这不是必需的。

通过http://www.example.com 访问时,一切正常。但是,通过https://www.example.com 访问会超时。

对于正确的高级设置,我将不胜感激。

编辑:我没有收到对此问题的任何回复。我认为它太笼统了? 我希望确认我使用的高级推理是正确的。我应该只在负载均衡器中安装证书,并将负载均衡器配置为接受 443 端口上的连接,但将 80 端口上的所有内容路由到内部 Web 服务器实例。

【问题讨论】:

    标签: ruby-on-rails-4 amazon-web-services ssl nginx puma


    【解决方案1】:

    我不知道你是否解决了你的问题,但是对于可能在这里找到这个问题的人来说,这就是我为使其正常工作所做的工作。

    我已经阅读了一整天,发现目前正在运行的两种配置的混合

    基本上你需要配置nginx重定向到https,但是一些推荐的配置对nginx配置没有任何作用。

    基本上我正在使用这个 gist 配置: https://gist.github.com/petelacey/e35c98f9a35063a89fa9

    但是从这个配置中我添加了重启 nginx 服务器的命令: https://gist.github.com/KeithP/f8534c04d20c2b4e4b1d

    我对此的看法是,当 eb deploy 进程设法复制配置文件时,nginx 已经启动(?)使这些更改毫无用处。因此需要手动重启,如果有更好的方法请告诉我们

    【讨论】:

    • 是的,我最终解决了它。我会尽快发布完整的配置文件。
    • @Augusto 你能发布那些文件,希望完成同样的事情
    • 嗨。对不起,我从来没有时间发布这些。我会尽快找到 AMI 并发布程序。
    【解决方案2】:

    我只是偶然发现了这个问题,因为我遇到了同样的问题:对https://myapp.com 的所有请求都超时,我不知道为什么。简而言之,我如何在 AWS 上的 Rails 应用程序中实现(强制)HTTPS:

    我的应用:

    启用了config.force_ssl = true (production.rb) 的 Rails 5 - 因此来自 HTTP 的所有连接都将在 Rails 应用程序中重新路由到 HTTPS。无需设置困难的 nginx 规则。同一个应用程序使用 gem 'rack-ssl-enforcer',就像在 Rails 4.2 上一样。

    旁注: AWS LoadBalancers 在过去的 HTTP GET 请求中用于检查实例的运行状况(现在它们支持 HTTPS)。因此,必须为 SSL 强制定义异常规则:Rails 5:config.ssl_options = { redirect: { exclude: -> request { request.path =~ /health-check/ } } }(在 production.rb 中),并带有到 Rails 应用程序中控制器的相应路由。

    旁注: 在 Rails 5 中,初始化程序 new_framework_defaults.rb 已经定义了“ssl_options”。确保在使用 production.rb 中的“ssl_options”规则之前禁用它。

    AWS:

    在 AWS 上使用两个侦听器规则在负载均衡器上设置有效证书的 Elastic Beanstalk:

    1. LB 上的 HTTP 80 请求被定向到实例上的 HTTP 80

    2. LB 上的 HTTPS 443 请求被定向到实例上的 HTTP 80(此处需要应用证书)

    您会看到负载均衡器是 SSL 的终止点。所有来自 HTTP 的请求都会经过 LB,然后由 Rails App 自动重定向到 HTTPS。

    没人告诉你的事情

    有了这个,HTTPS 请求将仍然超时(在这里我花了 天! 来找出原因)。最后这是一个非常简单的问题:LoadBalancer 的安全组(在 AWS 控制台 -> EC2 -> 安全组中)只接受端口 80(HTTP)上的请求 -> 也只需激活端口 443(HTTPS)。然后它应该可以工作(至少它对我有用)。

    【讨论】:

      【解决方案3】:

      Michael Fehr 的答案有效,应该是公认的答案。我有同样的问题,添加config.force_ssl = true 是我错过的。备注您不需要添加 ebs 配置文件,他们说如果您使用负载均衡器,则必须添加。这可能会产生误导,他们没有在文档中指定

      【讨论】:

      • 应该将此作为评论添加到 Michael Fehr 的回答中。
      • 对不起,我没有所需的声誉,我认为可能对其他人有用,我想我应该更活跃^^。
      猜你喜欢
      • 2019-04-10
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2023-04-09
      • 1970-01-01
      • 2016-02-10
      • 2016-12-05
      相关资源
      最近更新 更多