如何 运行 Node/Express 端口 3001、3002 等上的应用程序?
How to run Node/Express App on port 3001, 3002 etc?
我们在单个服务器中使用 4 个不同的 express 项目,运行ning pm2 start
从每个项目根目录执行命令以启动应用程序。
并使用 ec2 Linux 服务器,将端口 3000
、3001
添加到入站规则,两个 运行 都可以,但无法访问 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 list
和id 8
有端口号3001
注意:不一定是答案,但这些是我以前搞砸的一些事情,这是我用来解决问题的过程......
PM2 配置
首先检查它以确保您没有任何冲突。
(如评论中所述,请提供 pm2 list
的屏幕截图,如果可能,甚至提供 PM2 配置文件)
您如何 运行ning PM2,单个 ecosystem.json
配置?多个 ecosystem.json
配置?无论哪种方式...
确保每个 app
都有正确指定的属性...
script:
(启动脚本)
cwd:
(工作目录)
- 每个进程唯一
name:
- 如果您在 PM2 配置中指定环境变量
env:
,请确保它们分别正确设置为 3000
和 3001
。
- 确保您没有在
3000
上不小心将两个应用程序硬编码到 运行。即确保这些 env
配置确实被使用。
这里要注意的另一件事是,如果您更新 PM2 配置文件,一个简单的 pm2 restart
将不会查找新配置。您需要添加 --update-env
标志。
基本端口 Web 服务器测试
如果上述对 PM2 的检查没有问题,那么我将通过暂时完全消除节点来开始进一步缩小范围。您可以尝试类似这样的方法来快速测试端口 3001 的可访问性...
- 停止所有 pm2 进程
pm2 stop all
- 安装 Nginx
sudo apt-get install nginx
- 编辑默认配置文件
sudo nano /etc/nginx/conf.d/default
或者任何你想要的编辑器
- 配置服务器。添加到文件顶部...
server {
listen 3001;
listen [::]:3001;
location / {
return 200 '3001 works!';
}
}
- 重启 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 rule
和source
必须是anywhere
。现在运行正常。
ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.
我们在单个服务器中使用 4 个不同的 express 项目,运行ning pm2 start
从每个项目根目录执行命令以启动应用程序。
并使用 ec2 Linux 服务器,将端口 3000
、3001
添加到入站规则,两个 运行 都可以,但无法访问 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 list
和id 8
有端口号3001
注意:不一定是答案,但这些是我以前搞砸的一些事情,这是我用来解决问题的过程......
PM2 配置
首先检查它以确保您没有任何冲突。
(如评论中所述,请提供 pm2 list
的屏幕截图,如果可能,甚至提供 PM2 配置文件)
您如何 运行ning PM2,单个 ecosystem.json
配置?多个 ecosystem.json
配置?无论哪种方式...
确保每个 app
都有正确指定的属性...
script:
(启动脚本)cwd:
(工作目录)- 每个进程唯一
name:
- 如果您在 PM2 配置中指定环境变量
env:
,请确保它们分别正确设置为3000
和3001
。 - 确保您没有在
3000
上不小心将两个应用程序硬编码到 运行。即确保这些env
配置确实被使用。
这里要注意的另一件事是,如果您更新 PM2 配置文件,一个简单的 pm2 restart
将不会查找新配置。您需要添加 --update-env
标志。
基本端口 Web 服务器测试
如果上述对 PM2 的检查没有问题,那么我将通过暂时完全消除节点来开始进一步缩小范围。您可以尝试类似这样的方法来快速测试端口 3001 的可访问性...
- 停止所有 pm2 进程
pm2 stop all
- 安装 Nginx
sudo apt-get install nginx
- 编辑默认配置文件
sudo nano /etc/nginx/conf.d/default
或者任何你想要的编辑器
- 配置服务器。添加到文件顶部...
server {
listen 3001;
listen [::]:3001;
location / {
return 200 '3001 works!';
}
}
- 重启 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 rule
和source
必须是anywhere
。现在运行正常。
ec2-Instances -> launch-wizard-1 -> right click -> edit inbound rules.