连接上游时,connect()连接失败(111:连接被拒绝)。

8

我正在使用Rackspace和nginx web服务器托管我的Rails应用。

每当调用任何Rails API时,我都会在/var/log/nginx/error.log中看到以下信息: *49 connect() failed (111: Connection refused) while connecting to upstream, client: 10.189.254.5, server: , request: "POST /api/v1/users/sign_in HTTP/1.1", upstream: "http://127.0.0.1:3001/api/v1/users/sign_in", host: "anthemapp.com"

  1. 什么是upstream块?
  2. /etc/nginx/sites-available/default是什么?我可以在哪里进行配置?
  3. 为什么会出现上面的错误?

我花了几个小时与5-6个不同的Rackspace技术人员一起解决问题(他们不知道如何解决)。这一切始于我进入救援模式并按照此处的步骤进行操作:https://community.rackspace.com/products/f/25/t/69。一旦我退出救援模式并重新启动服务器,我就开始收到上述错误。谢谢!

3个回答

12

Nginx是一个反向代理服务器 - 它在您的服务器上的作用是接受HTTP请求并将其代理到同一主机上的另一个进程。错误消息中提到的“上游”是指nginx配置中的一部分(其中包括/etc/nginx/sites-available/default文件),该部分告诉它应该将传入的请求发送到哪里。您看到的错误消息表示nginx收到了请求,但无法将其发送到预定的其他进程。

当您的服务器重新启动时,nginx进程重新启动,但是您的Rails进程 - 那个应该监听端口3001的进程 - 没有启动!

如何重新启动Rails进程取决于您之前启动它的方式以及您的服务器配置方式。可能只需要进入服务器上Rails应用程序的目录并运行:

rails server -b 127.0.0.1 -p 3001 -e production -d

...但是为了避免类似问题在未来发生(并提高Rails应用程序的性能!),最好使用某种生产就绪的Rails应用程序服务器。我建议使用Phusion Passenger,因为它是最简单的解决方案--他们nginx用户指南描述了安装和配置--但还有很多其他选择。有一篇很棒的文章介绍了你的选项、它们的含义以及它们之间的关系,在这个StackOverflow问题的顶部回答中


谢谢Ash!我正在使用Thin作为我的应用服务器。我该如何确保Thin正在运行?我如何调试nginx和Thin之间的配置? - etayluz
啊,很好,你已经在使用除了WEBrick之外的东西了!我自己没有特别使用过Thin,但是快速执行 ps -ef | grep thin 命令应该会显示是否有任何thin进程正在运行。 - Ash Wilson
另外,看起来sudo thin install实际上会为您编写一个/etc/init.d脚本,以确保在启动时运行thin。这很方便!我发现了一篇谈论它的博客文章:http://jordanhollinger.com/2011/04/22/how-to-use-thin-effectivly/ - Ash Wilson

0

当我运行以下命令时,问题得到解决

cap production puma:restart

有时在生产环境切换 Ruby 版本时会出现这种情况


0
在我的情况下,我需要运行:
bundle install
bundle update

然后:

sudo stop puma-manager
sudo start puma-manager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接