3

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

并且使用 ec2 Linux 服务器,添加 port 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.

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

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

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

pm2 status 显示所有端口都运行良好。

在此处输入图像描述

pm2 list上面id 8有端口号3001

4

3 回答 3

3

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

PM2 配置

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

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

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

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

这里要注意的另一件事是,如果您更新您的 PM2 配置文件,a simplepm2 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 或相关的安全组,而是您的节点服务器。

于 2019-01-27T02:14:04.893 回答
2

如果您的代码看起来像这样

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;
    }
}
于 2019-01-28T08:25:29.607 回答
0

这是端口号问题,从服务器入站规则重新检查,端口 3001 和 3002 等是否正确添加,custom TCP rule并且source必须是anywhere. 现在运行良好。

ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.
于 2019-02-01T08:43:03.787 回答