监听 443 端口的 PM2 显示 EADDRINUSE: address already in use :::443
PM2 listening on port 443 shows EADDRINUSE: address already in use :::443
我在 AWS Lightsail 实例上有一个 Node/Express 服务器 运行,使用 PM2 作为进程管理器。服务器当前正在侦听端口 4000。实例的 IP 地址附加到具有有效 SSL 证书并自动从 HTTP 重定向到 HTTPS 的子域。此时访问 https://example.com 会显示“恭喜!您现在是云中的 运行 Bitnami Node.js 12.18.3。”页面。
目前,所有 Express 端点只能通过 http://example.com:4000/endpoint, but I want the Express app to run on port 443 so that the endpoints are accessible immediately on https://example.com/endpoint 访问。
我读到 PM2 能够侦听端口 80 和 443 并尝试了 documentation 中提到的方法,但是每当我将 .env 文件中的端口号更改为 443 并使用重新加载应用程序时pm2 reload app
,我收到以下错误:
0|app | Error: listen EADDRINUSE: address already in use :::443
0|app | at Server.setupListenHandle [as _listen2] (net.js:1313:16)
0|app | at listenInCluster (net.js:1361:12)
0|app | at Server.listen (net.js:1447:7)
0|app | at Function.listen (/opt/bitnami/apache/htdocs/node_modules/express/lib/application.js:618:24)
0|app | at Object.<anonymous> (/opt/bitnami/apache/htdocs/app.js:44:5)
0|app | at Module._compile (internal/modules/cjs/loader.js:1137:30)
0|app | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
0|app | at Module.load (internal/modules/cjs/loader.js:985:32)
0|app | at Function.Module._load (internal/modules/cjs/loader.js:878:14)
0|app | at Object.<anonymous> (/opt/bitnami/node/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23) {
0|app | code: 'EADDRINUSE',
0|app | errno: 'EADDRINUSE',
0|app | syscall: 'listen',
0|app | address: '::',
0|app | port: 443
0|app | }
App.js
const express = require('express');
const dotenv = require('dotenv');
const app = express();
app.use(express.json()); // for parsing POST bodies
dotenv.config();
app.get("/hello", (req, res) => res.send("Hello World!"));
app.listen(process.env.PORT, () => {
console.log(` App listening on port ${process.env.PORT}!`);
});
.env
PORT=443
编辑:
pm2 status output
不幸的是,我无法使用 Nginx,而是使用 Apache 的虚拟主机配置将所有流量从端口 443 重定向到 4000。更多信息 here。
您的控制台错误统计端口已被使用,请尝试更改 PORT=8282
并查看是否可以解决,但是,如果问题仍然存在,请将您的 dotenv
配置移到顶部 require('dotenv').config()
.
我在 AWS Lightsail 实例上有一个 Node/Express 服务器 运行,使用 PM2 作为进程管理器。服务器当前正在侦听端口 4000。实例的 IP 地址附加到具有有效 SSL 证书并自动从 HTTP 重定向到 HTTPS 的子域。此时访问 https://example.com 会显示“恭喜!您现在是云中的 运行 Bitnami Node.js 12.18.3。”页面。
目前,所有 Express 端点只能通过 http://example.com:4000/endpoint, but I want the Express app to run on port 443 so that the endpoints are accessible immediately on https://example.com/endpoint 访问。
我读到 PM2 能够侦听端口 80 和 443 并尝试了 documentation 中提到的方法,但是每当我将 .env 文件中的端口号更改为 443 并使用重新加载应用程序时pm2 reload app
,我收到以下错误:
0|app | Error: listen EADDRINUSE: address already in use :::443
0|app | at Server.setupListenHandle [as _listen2] (net.js:1313:16)
0|app | at listenInCluster (net.js:1361:12)
0|app | at Server.listen (net.js:1447:7)
0|app | at Function.listen (/opt/bitnami/apache/htdocs/node_modules/express/lib/application.js:618:24)
0|app | at Object.<anonymous> (/opt/bitnami/apache/htdocs/app.js:44:5)
0|app | at Module._compile (internal/modules/cjs/loader.js:1137:30)
0|app | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
0|app | at Module.load (internal/modules/cjs/loader.js:985:32)
0|app | at Function.Module._load (internal/modules/cjs/loader.js:878:14)
0|app | at Object.<anonymous> (/opt/bitnami/node/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23) {
0|app | code: 'EADDRINUSE',
0|app | errno: 'EADDRINUSE',
0|app | syscall: 'listen',
0|app | address: '::',
0|app | port: 443
0|app | }
App.js
const express = require('express');
const dotenv = require('dotenv');
const app = express();
app.use(express.json()); // for parsing POST bodies
dotenv.config();
app.get("/hello", (req, res) => res.send("Hello World!"));
app.listen(process.env.PORT, () => {
console.log(` App listening on port ${process.env.PORT}!`);
});
.env
PORT=443
编辑: pm2 status output
不幸的是,我无法使用 Nginx,而是使用 Apache 的虚拟主机配置将所有流量从端口 443 重定向到 4000。更多信息 here。
您的控制台错误统计端口已被使用,请尝试更改 PORT=8282
并查看是否可以解决,但是,如果问题仍然存在,请将您的 dotenv
配置移到顶部 require('dotenv').config()
.