如何 运行 Node/Express 端口 3001、3002 等上的应用程序?

How to run Node/Express App on port 3001, 3002 etc?

我们在单个服务器中使用 4 个不同的 express 项目,运行ning pm2 start 从每个项目根目录执行命令以启动应用程序。

并使用 ec2 Linux 服务器,将端口 30003001 添加到入站规则,两个 运行 都可以,但无法访问 API通过 3001,并且可以访问 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.

我们如何在 available/defined 端口中 运行 多个 node/express 项目?

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

某些端口 运行宁没有添加作为入站规则,如 8088、8089。

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

上面的pm2 listid 8有端口号3001

注意:不一定是答案,但这些是我以前搞砸的一些事情,这是我用来解决问题的过程......

PM2 配置

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

您如何 运行ning 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 访问 public IP,它应该会用 "3001 works!"

下载一个文本文件到你的机器

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

如果您的代码如下所示

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;
    }
}

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

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