502 bad gateway nginx + puma + rails 3.2 on Elastic Beanstalk

Posted

技术标签:

【中文标题】502 bad gateway nginx + puma + rails 3.2 on Elastic Beanstalk【英文标题】: 【发布时间】:2015-05-18 06:15:06 【问题描述】:

部署成功,一切都是绿色的。但是当我们尝试访问应用程序 URL 时,它会给出502 Bad Gateway 错误。

使用ps -aux | grep puma 检查 puma 进程不会返回任何附加到 puma 服务器的进程,但 pgrep 会返回以下进程。

$pgrep -fl puma
18009 su -s /bin/bash -c bundle exec puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb webapp
18031 ruby /opt/rubies/ruby-2.0.0-p598/bin/puma -C /opt/elasticbeanstalk/support/conf/pumaconf.rb

【问题讨论】:

听起来 nginx 没有在 puma 运行的同一个端口上监听。您是否更改了任何 puma/nginx 配置?查看 /var/log/nginx/error.log 的原因 @Tal 请在下面查看我的答案,我已经尝试了所有可能的配置并检查了日志。问题是,Puma 运行不正常,并且不打印任何错误日志。事实是,同样的配置也适用于数字海洋。所以,亚马逊似乎有问题。请帮忙。 很好地发布答案不是要走的路。请将其移至问题部分。我必须承认我已经受够了让亚马逊处理我的服务器并且已经切换到弹性 beantalk 上的 docker。效果很好。 【参考方案1】:

我在上传我的 rails 应用程序后遇到了这个问题,我在 secrets.yml (config > secrets.yml) 上找到了这一行(自动生成):secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

所以你必须将它作为环境变量添加到你的环境中。

在环境仪表板中,转到配置 > 软件 > 环境属性并添加一个名为SECRET_KEY_BASE的新变量>.

您可以设置任何值,但请确保它是安全的密钥。 这解决了我的问题,我希望它有所帮助。

【讨论】:

【参考方案2】:

我无法解决这个问题。此外,我们应该只使用 EC2 免费实例而不是 BeanStalk。

我们现在已经使用 RDS 迁移到 Free EC2 实例,并使用 Capistrano 和 Nginx + Unicorn 部署了 rails 应用程序。虽然这并不容易[1][2] 但最终我们成功了。

【讨论】:

通过添加 SSL 证书解决了这个问题,SSL 是此配置的必备条件。没有它,它就行不通。【参考方案3】:

我已经尝试了所有可能的组合,如所有其他论坛/博客或 nginx/puma 支持站点中所示。以下是状态。

    默认配置 - 我们在 nginx.conf 和 pumaconf.rb 的 UPSTREAM 选项中使用了 UNIX:// sock 文件 - 这给出了 502 bad gatway。选中后,puma 没有运行,它每 3 分钟重新启动一次。 正如我们在 DigitalOcean 中使用的那样 - 在 pumaconf.rb 中将上述 UPTREAM conf URL 更改为 tcp://127.0.0.1:3000,在 conf.d/webapp.conf 文件中更改为 127.0.0.1:3000。 - 这也不起作用,puma 不能像上面一样正常运行。

我的问题是,

    为什么无法控制使用 diff 运行 puma。配置?以及为什么我们必须始终使用无法按照其他标准配置选项正确运行服务的 UI? UI 中没有配置选项来更改/验证 UI。所以我们必须通过 SSH 来完成。但是,我们无法控制从控制台重启 PUMA。 每当 puma 未运行时,我们都无法查看它所面临的错误的任何日志。这真的一点用都没有。

即使使用默认配置,Puma 也无法运行,因此 nginx 无法与 Puma 通信,因此 EC2 没有真正意义!

如果您对此有任何想法,请告诉我们,我们将如何解决此问题。

看到这个 - https://forums.aws.amazon.com/thread.jspa?messageID=608148&#608148

这个还是没有答案,这就像我们的手被铐住了,无法改变任何配置!

更新

AWS 以某种方式停止和启动 PUMA,因为我可以在使用 ps -ef|grep puma 检查时看到进程 ID 发生了变化。所以,我启动 puma 在另一个端口上工作,并尝试检查它是否运行。

在另一个端口上启动,然后从另一个控制台使用wget http://127.0.0.1:3000 访问 URL。它打印以下日志。

current]$ bundle exec puma -b tcp://127.0.0.1:3001
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://127.0.0.1:3001
Rails Error: Unable to access log file. Please ensure that /var/app/current/log/production.log exists and is chmod 0666. The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.
Use Ctrl-C to stop
2015-03-16 13:19:35 +0000: HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.>
2015-03-16 13:19:35 +0000: ENV: "rack.version"=>[1, 1], "rack.errors"=>#<IO:<STDERR>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", "CONTENT_TYPE"=>"text/plain", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"2.0.1", "GATEWAY_INTERFACE"=>"CGI/1.2"

那么,必须使用 SSL 吗?因为我认为默认情况下是没有开启的。

【讨论】:

以上是关于502 bad gateway nginx + puma + rails 3.2 on Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 显示502 Bad Gateway错误

502 bad gateway nginx怎么解决

nginx 502 Bad Gateway 错误解决办法

调试 502 Bad Gateway 错误 - Ubuntu、Nginx、Unicorn

服务器域返回 502 Bad Gateway - Nginx

nginx 502 bad gateway