Ruby on rails 弹性豆茎上的轨道,罐';不要执行负载平衡器运行状况检查

Ruby on rails 弹性豆茎上的轨道,罐';不要执行负载平衡器运行状况检查,ruby-on-rails,amazon-web-services,amazon-ec2,amazon-elastic-beanstalk,Ruby On Rails,Amazon Web Services,Amazon Ec2,Amazon Elastic Beanstalk,我在elastic beanstalk上运行rails应用程序,我的问题是我无法使用负载平衡器健康检查,因为它通过http而不是https进行检查。我将config.force_ssl设置为true,不想更改它,因为这意味着我有100%的ssl覆盖率、HSTS和安全cookie。 我已经设置了一个控制器来检查at/health,并且可以通过curl访问它。 elastic beanstalk(EC2实例健康检查)中显示的内容与EC2中负载平衡器中的健康检查之间似乎存在矛盾,在EC2中,我只能更改

我在elastic beanstalk上运行rails应用程序,我的问题是我无法使用负载平衡器健康检查,因为它通过http而不是https进行检查。我将config.force_ssl设置为true,不想更改它,因为这意味着我有100%的ssl覆盖率、HSTS和安全cookie。 我已经设置了一个控制器来检查at/health,并且可以通过curl访问它。 elastic beanstalk(EC2实例健康检查)中显示的内容与EC2中负载平衡器中的健康检查之间似乎存在矛盾,在EC2中,我只能更改路径和一些计时,而在EC2中,我可以将ping协议、端口和路径更改为我想要的,但这似乎除了导致503错误之外没有其他效果

Ping Protocol: https 
Ping Port: 443 
Ping Path: /health
负载平衡器的端口80和443处于打开状态,但由于强制ssl,端口从80重定向到443

有人知道解决这个问题的正确设置吗?如果没有它,我将无法扩展应用程序

多谢各位


Eamon执行此操作的方法是将其添加到配置中,如下所示

config.force_ssl
config.ssl_options = { redirect: { exclude: -> request { request.path =~ /health/ } } }
这与rails文档一致,对rails 5有效:


如果像我一样,您没有使用rails 5,另一种方法是禁用强制SSL,并使用NGINX将所有流量强制到https上。。。您可以使用ebextension文件来执行此操作。您需要的确切版本直接来自AWS:

如果您需要有关ebextensions的更多信息,可以在文档中找到它们

编辑:原始链接不再有效

试试这个:

接受的答案对我一直不起作用,但经过几个小时的调试,我发现了这个宝石:


它在
/healthcheck
上返回200,就像一个符咒。

接受答案的小提示:

如果您已经从Rails 4更新到Rails 5,因此在初始化器目录中有一个
new\u frameworks\u default.rb
。您需要删除(或删除注释)以下行:

Rails.application.config.ssl_options = { hsts: { subdomains: true } }

否则,
ssl\u选项
已经设置。

您能详细说明一下@etphoneshome吗?我是否必须在
public
中放置一个文件,并在
myurl.com/health
上提供该文件?这是一个解析到rails控制器的路由,我在该控制器上做了一个简单的检查,以确保数据库连接处于活动状态。对于已从以前的rails版本迁移到rails 5的项目,请参阅此答案。包含相关链接的链接不再工作code@SiguMagwa-谢谢你的提醒。我已经更新了新的链接-希望对你有用。