如何在端口3001、3002等上运行Node / Express App?

时间:2019-01-22 07:29:56

标签: node.js http amazon-ec2 pm2 port-number

我们正在单个服务器中使用4个不同的Express项目,从每个项目根目录运行pm2 start cmd来启动应用。

并使用ec2 Linux服务器,在入站规则中添加了端口30003001,它们都运行良好,但无法通过3001访问API,并且能够通过3000访问,这可以有问题吗?

同一项目在3000上运行,但不在3001中运行,因此我们可以确认,我们的项目中没有错误。

在终端nodemon app上尝试运行正常,但没有被Postman访问,得到相同的错误:

Could not get any response

There was an error connecting to http://ec2-x-x-amazonaws.com:3001/api/login.

我们如何在可用/定义的端口中运行多个节点/表达式项目?

3001    tcp 0.0.0.0/0, ::/0 ✔
3000    tcp 0.0.0.0/0, ::/0 ✔

一些运行时没有添加作为入站规则的端口,例如8088、8089。

pm2 状态显示所有端口运行正常。

enter image description here

pm2 list在上方,id 8的端口号为3001

3 个答案:

答案 0 :(得分:1)

注意:不一定是答案,但这是我之前弄错的一些内容,这是我用来解决问题的过程...

PM2配置

首先检查此内容,以确保没有任何冲突。
(如评论中所述,请提供pm2 list的屏幕截图,如果可能,甚至还提供PM2配置文件)

您如何运行PM2(单个ecosystem.json配置)?多个ecosystem.json配置?无论哪种方式...

确保每个app具有正确指定的属性...

  • script:(启动脚本)
  • cwd:(工作目录)
  • 每个过程都唯一的name:
  • 如果要在PM2配置中指定环境变量env:,请确保将它们分别正确设置为30003001
  • 请确保您没有意外地对这两个应用程序进行硬编码以使其在3000上运行。也就是说,请确保这些env配置实际上已在使用。

这里要注意的另一件事是,如果更新PM2配置文件,则简单的pm2 restart不会寻找新配置。您将需要添加--update-env标志。



基本端口Web服务器测试

如果上面对PM2的检查很好,那么我现在将通过完全消除节点来进一步缩小范围。您可以尝试使用类似方法来快速测试端口3001的可访问性...

  1. 停止所有pm2进程

pm2 stop all

  1. 安装Nginx

sudo apt-get install nginx

  1. 编辑默认配置文件

sudo nano /etc/nginx/conf.d/default或您想要的任何编辑器

  1. 配置服务器。添加到文件顶部...

 server {
      listen 3001;
      listen [::]:3001;
      location / {
          return 200 '3001 works!';
      }
  }

  1. 重新启动Nginx

sudo service nginx restart


现在尝试访问端口3001上的公共IP,它应该使用“ 3001可以使用!”

将文本文件下载到您的计算机上。

如果这可行,则问题不是EC2或相关的安全组,而是您的节点服务器。

答案 1 :(得分:1)

如果您的代码如下所示

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var port = process.env.PORT || 3000;

app.listen(port, function () {
  console.log('Example app listening on port ' + port + '!');
});

您可以像这样启动服务器来更改端口

PORT=8000 node index.js

有关更多示例,请查看https://gist.github.com/indiesquidge/7fe1d8be1b973f782c97

您还可以使用process.argv

将端口作为参数传递给脚本。
var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var port = getPort();

app.listen(port, function () {
  console.log('Example app listening on port ' + port + '!');
});

function getPort(){
    if(process.argv.length > 2){
        return process.argv[2];
    } else {
        return 3000;
    }
}

答案 2 :(得分:0)

这是一个端口号问题,需要根据服务器入站规则重新检查,是否正确地将custom TCP rulesource添加的端口3001和3002等必须为anywhere。现在运行正常。

ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.