使用AWS Load Balancer Ngnix和Puma在Rails 4上启用SSL

Aug*_*tos 2 ssl nginx amazon-web-services puma ruby-on-rails-4

我尝试过为我的项目配置SSL失败了.

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

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

通过http://www.example.com访问eveything工作正常.但是,通过https://www.example.com访问超时.

我希望得到一些适当的高级设置帮助.

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

Mic*_*ehr 6

我只是偶然发现了这个问题,因为我有同样的问题:所有请求https://myapp.com超时,我无法找出原因.简而言之,我可以在AWS上的Rails应用程序中实现(强制)HTTPS:

我的应用:

Rails 5已启用config.force_ssl = true(production.rb) - 因此来自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:

使用两个侦听器规则在Load Balancer上使用有效证书在AWS上设置Elastic Beanstalk:

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

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

您会看到Load Balancer是SSL的终止点.来自HTTP的所有请求都将通过LB,然后由Rails应用程序自动重定向到HTTPS.

没有人告诉你的事情

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