【问题标题】:PM2 (Node.js) not listening on specified portPM2(Node.js)未侦听指定端口
【发布时间】:2014-08-03 06:49:20
【问题描述】:

我正在尝试在 PM2 上启动并运行 Node/Express 应用程序。我可以使用以下命令启动应用程序:npm start

这会在端口 3000 上启动应用程序。

如果我尝试使用 pm2 start app.js 启动应用程序,我会在日志中看到以下内容:

{ online: true, success: true, pid: 10714, pm2_version: '0.8.15' }
2014-06-12T19:52:06.789Z : [[[[ PM2/God daemon launched ]]]]
2014-06-12T19:52:06.800Z : RPC interface [READY] on 6666:localhost
2014-06-12T19:52:06.801Z : BUS system [READY] on  6667:localhost
2014-06-12T19:52:06.978Z : Entering in node wrap logic (cluster_mode) for script     /home/user/test/app.js
2014-06-12T19:52:07.115Z : /home/user/test/app.js - id0 worker online

在我的 bin/www 文件中,我指定了以下端口:

app.set('port', process.env.PORT || 3000);

我也试过运行export PORT=3000

以及bin/www中的以下内容:

app.set('port', 3000);

如果我运行 netstat -an | grep 3000,我将一无所获。

【问题讨论】:

  • 好吧,您将其设置为process.env.PORT除非未定义,然后您将其设置为3000。你试过3000吗?
  • 是的,我也试过了——它仍然没有监听端口3000
  • 该日志输出看起来像来自pm2.log,是否有您的应用程序的日志文件?也许在你console.log 服务器以主机/端口启动之后的东西?

标签: javascript node.js pm2


【解决方案1】:

在我的情况下,它正在侦听特定端口,但由于某种原因我的界面找不到主机/端口,然后我安装了 NGINX 并将默认设置为: /etc/nginx/sites-enabled/

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        server_name _;

        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection “upgrade”;
            proxy_max_temp_file_size 0;
            proxy_pass ip:port/; <<<<<<<<< Change the IP and port >>>>>>>>>
            proxy_redirect off;
            proxy_read_timeout 240s;
        }

}

检查最后几行。反向代理有效。

Obs:/etc/nginx/sites-enabled/default 包含在 /etc/nginx/nginx.conf 中,然后用作 NGINX 的配置

【讨论】:

    【解决方案2】:

    我用这个

    pm2.json

    [
    {
      "exec_mode": "fork_mode",
      "cwd" : "/opt/acme_service",
      "script": "acme_service.js",
      "name": "acme_service",
      "restart_delay":"9000",
      "port"       : 8081,
      "node_args": [ "--acme" ],
      "error_file": "/var/log/acme_service.err.log",
      "out_file": "/var/log/acme_service.out.log"
    }
    ]
    

    "port" : 8081 - 接受端口连接。应用内相同

    var server = app.listen(8081 , '0.0.0.0');
    

    【讨论】:

    • 请解释您如何以及为什么认为这是一个解决方案。
    【解决方案3】:

    我遇到了类似的问题,将 nginx 配置为代理服务器时,我看不到 PM2 运行的 Express 应用程序。当我删除我的 ~/.pm2 文件夹时,它起作用了。

    【讨论】:

      【解决方案4】:

      对于任何使用 Express 的人来说,答案是运行以​​下命令:

      pm2 start ./bin/www

      我一直在运行pm2 start app.js,但没有成功。

      【讨论】:

      • 这里有什么区别?
      • 你救了我 2 天。如果能给出解释就好了。
      • 为我工作。伟大的。我无法在其他任何地方找到正确的答案。 pm2 开始 ./bin/www
      • 为我工作...非常感谢!!!它也不能在 3000 工作
      • 这完全没有意义。 ./bin/www 怎么知道我的 sever.js 文件在哪里?
      【解决方案5】:

      您的app.set('port'... 呼叫没有直接关系。 app.set 只是一个存储键/值设置的地方,但它本身提供零功能。您要查看的是您调用 app.listen 的位置,因为该函数接受端口作为参数。

      【讨论】:

      • 貌似还是设置在bin/www - var server = app.listen(app.get('port'), function() { debug('Express server监听端口' + server.address().port); });
      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多