我尝试为项目配置SSL失败。
我的AWS负载均衡器已正确配置并接受证书密钥。我已将侦听器配置为将端口80流量和端口443流量同时路由到实例上的端口80。
我可以想象,无需对实例(Nginx和Puma)进行进一步的修改,因为所有内容都路由到了实例上的端口80。我已经看到了在实例上安装证书的示例,但是我知道负载均衡器是SSL终止点,因此这不是必需的。
通过http://www.example.com访问时,一切正常。但是,通过https://www.example.com访问超时。
我将对适当的高级设置有所帮助。
编辑:我没有收到任何对此问题的答复。我认为这太笼统了吗?
我很高兴确认我使用的高级推理是正确的。我应该仅将证书安装在负载均衡器中,并将负载均衡器配置为接受443端口上的连接,但将80端口上的所有内容内部路由到Web服务器实例。
最佳答案
我偶然遇到了这个问题,因为我遇到了同样的问题:对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 App中控制器的相应路由。
旁注:在Rails 5中,初始化程序new_framework_defaults.rb已经定义了“ ssl_options”。确保在production.rb中使用“ ssl_options”规则之前将其禁用。
AWS:
AWS上的Elastic Beanstalk设置使用两个监听器规则在Load Balancer上具有有效证书:
LB上的HTTP 80请求被定向到实例上的HTTP 80
LB上的HTTPS 443请求被定向到实例上的HTTP 80(此处需要应用证书)
您会看到负载均衡器是SSL的终止点。来自HTTP的所有请求都将通过LB,然后由Rails App自动重定向到HTTPS。
没有人告诉你的事
有了这个,HTTPS请求仍然会超时(在这里我花了几天时间来弄清楚原因)。最后,这是一个非常简单的问题:LoadBalancer的安全组(在AWS控制台-> EC2->安全组中)仅在端口80(HTTP)->激活端口443(HTTPS)上接受请求。然后它应该起作用(至少对我有用)。