当我们在使用 PM2 启动 NodeJS 应用时,有时候会遇到“Port 80 is already in use”的错误,这是因为本地的 80 端口被占用了。本文将介绍几种解决方案来解决这个问题。
方案一:更改应用的端口号
更改应用的端口号是一种简单的解决方案。我们可以在应用的代码中找到监听端口的地方,然后将端口号更改为一个未被占用的端口号。
示例代码:
-- -------------------- ---- ------- ----- --- - --------------------- ----- ---- - ----- ------------ ----- ---- -- - --------------- --------- --- ---------------- -- -- - ---------------- --------- -- ---- ---------- ---
方案二:杀死占用 80 端口的进程
如果无法更改应用的端口号,我们可以通过杀死占用 80 端口的进程来解决问题。在 Windows 中,可以通过命令行执行以下命令:
netstat -ano |findstr "80"
该命令会列出占用 80 端口的进程的 PID。然后,我们可以使用以下命令杀死进程:
taskkill /f /pid <PID>
在 Linux 或 macOS 中,可以使用以下命令列出占用 80 端口的进程:
sudo lsof -i:80
然后,我们可以使用以下命令杀死进程:
sudo kill <PID>
需要注意的是,杀死占用 80 端口的进程可能会影响其他正在运行的服务,因此需要谨慎操作。
方案三:使用 PM2 转发请求
如果无法更改应用的端口号,也无法杀掉占用 80 端口的进程,我们可以使用 PM2 转发请求的方式来解决问题。
首先,我们需要安装一个名为“http-proxy”的 npm 包。然后,我们可以将 PM2 的启动命令更改为以下形式:
pm2 start main.js --name myApp pm2 start myProxy.js --name myProxy
其中,“main.js”是我们的应用程序,同时我们也开启了一个名为“myProxy”的 PM2 进程。
接着,我们在“myProxy.js”中添加以下代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- --------- - ---------------------- -- ------- ----- ------ - ------------------------ -- ------- ----- ----- - -------------------------------- -- ---- ----------------- -------- ----- ---- ---- - ------------------ - --------------- ------------ --- ------------------ ---- --------- --- -- -- ---- --- -------------------------- ----- ---- - -- ------ -------------------------------------------- ----- --------------------------------------------- ----- ----- -------- ---- ------ --------- --------------------------------------------- --------------------------------- -- -- --- --- --- -- -- ---------------------------- - ------- - ------------------------- ---- -- ---- -------------- ---- - ------ --- - ---- - -- -------- ------------------ - --------------- ----------- --- -------------- --------- - --------------
以上代码中,“proxy.web(req, res, { target })”这一行会将请求转发到“target”指定的地址(本示例中为“http://localhost:8080”)。
最后,我们可以通过浏览器访问“http://localhost”,就可以看到我们的应用程序在 80 端口上运行了。
经过上述处理,我们就可以顺利通过 PM2 启动我们的 NodeJS 应用了。
总结:当 PM2 启动 NodeJS 应用时出现“Port 80 is already in use”错误时,我们可以通过更改应用的端口号、杀死占用 80 端口的进程或者使用 PM2 转发请求的方式来解决问题。三种解决方案都有其适用的场景,需要根据实际情况来选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a5236648841e98941988f2