【问题标题】:PM2 and Nginx: 502 Bad GatewayPM2 和 Nginx:502 错误网关
【发布时间】:2016-09-21 12:06:40
【问题描述】:

我一直在尝试将我的 Node 项目部署在一个全新的 DO 液滴上,但我遇到了一些 PM2 问题。

我的步骤如下:

  1. Node 已安装在 Droplet 映像上(Ubuntu,Node v4.4.4)
  2. 全球安装 PM2
  3. 将 Nginx 设置为反向代理 127.0.0.1:3000
  4. 克隆了我的项目并安装了 npm

我得到的只是 Nginx 抱怨 502 Bad Gateway。

如果我查看 Nginx error.log 我会得到:

connect() 在连接到时失败(111:连接被拒绝) 上游,客户端:client.ip,服务器:my.server,请求: “GET / HTTP/1.1”,上游:“http://127.0.0.1:3000/”,主机: “my.server

PM2 没什么好说的。 pm2 日志中没有任何内容,状态为 online

我尝试跳过 PM2,只执行 npm start,效果很好。我还尝试设置一个虚拟的 hello world 应用程序,并将其与 PM2 一起使用 - 它也有效。

所以这就是我目前所处的位置:

  • 我的项目 + PM2:不起作用。
  • 我的项目没有 PM2:工作正常。
  • Hello World 应用 + PM2:有效。

我不确定从这里去哪里.. 我可以跳过 PM2 并使用节点,但我确实想要 PM2 的功能。

有什么想法吗?

【问题讨论】:

  • 您确定您的应用实际上是在端口 3000 上启动的吗?
  • 嗯.. 这可能不是 Nginx 抱怨的那样。我只是不知道如何检查。 PM2 说一切都很好并且在线并且日志很干净。
  • 我的问题实际上变得如此愚蠢,我注意到仅针对确实修改数据库的 POST 请求给出了 502,这是应用程序目录中的一个 sqllite 文件,导致 PM2 重新启动应用程序在写入该文件时发送响应之前,因为它是使用 --watch 标志运行的。在其他情况下,可能是 --kill-timeout 对您的响应时间来说太短了,这也会导致应用重新启动。

标签: node.js ubuntu nginx pm2


【解决方案1】:

我只需要使用 bin/www 而不是 app.js 来启动 PM2。快递发电机和一切......

【讨论】:

  • 为了解决这个问题,我度过了一个非常可怕的下午。很想知道为什么 bin/www 有效,而 app.js 无效。
  • 谢谢。使用我的 MEAN 应用程序。
  • 还要确保 NODE_ENV=production
  • 什么是 bin/www,它在哪里?
  • @PeterMoses 和其他感兴趣的人:bin/www 是相对于您的应用程序目录。示例:我的项目在/var/www/my-project/。从my-project,我运行pm2 start node ./bin/www,我的应用程序现在按预期提供。
【解决方案2】:

Nginx 有一个名为 proxy_read_timeout 的指令,默认为 60 秒。它决定了 nginx 将等待多长时间来获得对请求的响应。在 Nginx 中。 conf 文件,将 proxy_read_timeout 设置为 120 秒解决了我们的问题。

【讨论】:

    【解决方案3】:

    如果使用 pm2 --watch 参数,可能会出现问题。它可能会检测到更新日志并不断重启服务器。

    【讨论】:

      【解决方案4】:

      这是节点安装的一些问题。删除 node_modules 文件夹,使用 npm 重新安装并使用 pm2 启动项目。

      pm2 杀

      rm -rf 节点模块

      npm 我

      pm2 启动 bin/www

      【讨论】:

        猜你喜欢
        • 2018-07-02
        • 2011-05-14
        • 2019-06-05
        • 2015-08-10
        • 2012-04-17
        • 2015-05-21
        • 2011-11-25
        • 2021-11-19
        • 2012-09-25
        相关资源
        最近更新 更多