我们正在单个服务器中使用4个不同的Express项目,从每个项目根目录运行pm2 start
cmd来启动应用。
并使用ec2 Linux服务器,在入站规则中添加了端口3000
,3001
,它们都运行良好,但无法通过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 状态显示所有端口运行正常。
pm2 list
在上方,id 8
的端口号为3001
答案 0 :(得分:1)
注意:不一定是答案,但这是我之前弄错的一些内容,这是我用来解决问题的过程...
PM2配置
首先检查此内容,以确保没有任何冲突。
(如评论中所述,请提供pm2 list
的屏幕截图,如果可能,甚至还提供PM2配置文件)
您如何运行PM2(单个ecosystem.json
配置)?多个ecosystem.json
配置?无论哪种方式...
确保每个app
具有正确指定的属性...
script:
(启动脚本)cwd:
(工作目录)name:
env:
,请确保将它们分别正确设置为3000
和3001
。3000
上运行。也就是说,请确保这些env
配置实际上已在使用。这里要注意的另一件事是,如果更新PM2配置文件,则简单的pm2 restart
不会寻找新配置。您将需要添加--update-env
标志。
基本端口Web服务器测试
如果上面对PM2的检查很好,那么我现在将通过完全消除节点来进一步缩小范围。您可以尝试使用类似方法来快速测试端口3001的可访问性...
pm2 stop all
sudo apt-get install nginx
sudo nano /etc/nginx/conf.d/default
或您想要的任何编辑器
server {
listen 3001;
listen [::]:3001;
location / {
return 200 '3001 works!';
}
}
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 rule
和source
添加的端口3001和3002等必须为anywhere
。现在运行正常。
ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.