遇到 PM2 启动 NodeJS 应用时出现 “Port 80 is already in use” 错误的解决方案

阅读时长 4 分钟读完

当我们在使用 PM2 启动 NodeJS 应用时,有时候会遇到“Port 80 is already in use”的错误,这是因为本地的 80 端口被占用了。本文将介绍几种解决方案来解决这个问题。

方案一:更改应用的端口号

更改应用的端口号是一种简单的解决方案。我们可以在应用的代码中找到监听端口的地方,然后将端口号更改为一个未被占用的端口号。

示例代码:

-- -------------------- ---- -------
----- --- - ---------------------
----- ---- - -----

------------ ----- ---- -- -
  --------------- ---------
---

---------------- -- -- -
  ---------------- --------- -- ---- ----------
---

方案二:杀死占用 80 端口的进程

如果无法更改应用的端口号,我们可以通过杀死占用 80 端口的进程来解决问题。在 Windows 中,可以通过命令行执行以下命令:

该命令会列出占用 80 端口的进程的 PID。然后,我们可以使用以下命令杀死进程:

在 Linux 或 macOS 中,可以使用以下命令列出占用 80 端口的进程:

然后,我们可以使用以下命令杀死进程:

需要注意的是,杀死占用 80 端口的进程可能会影响其他正在运行的服务,因此需要谨慎操作。

方案三:使用 PM2 转发请求

如果无法更改应用的端口号,也无法杀掉占用 80 端口的进程,我们可以使用 PM2 转发请求的方式来解决问题。

首先,我们需要安装一个名为“http-proxy”的 npm 包。然后,我们可以将 PM2 的启动命令更改为以下形式:

其中,“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

纠错
反馈