Nginx + PM2 实现 HTTPS 服务

阅读时长 5 分钟读完

在今天的互联网世界中,安全性是非常重要的一个问题,尤其是在数据传输方面,我们往往需要使用 HTTPS 协议来保护数据的安全性。虽然 Node.js 有自己的 HTTPS 实现,但使用 Nginx 作为反向代理能够提高服务的可靠性和性能,并且 Nginx 已经成为了许多互联网公司用于反向代理和负载均衡的首选。

本篇文章将介绍如何使用 Nginx + PM2 实现 HTTPS 服务。PM2 是一个流行的 Node.js 进程管理器,它可以帮助我们管理 Node.js 应用进程,并且可以自动重启应用程序。在本文中,我们将使用 PM2 来管理我们的 Node.js 应用。

准备工作

在开始本文之前,请确保你已经安装了以下软件:

  • Nginx
  • OpenSSL
  • Node.js(8.x 及以上版本)
  • PM2

如果你还没有安装这些软件,请根据不同的操作系统查找相应的安装教程。

生成 SSL 证书

了解了准备工作之后,我们需要先生成一个 SSL 证书,以便于使用 HTTPS 协议。我们可以使用 OpenSSL 来生成一个自签名的证书。在命令行中输入以下命令:

执行完成后,我们就可以在当前目录下找到两个文件:key.pem 和 cert.pem。其中,key.pem 是我们的私钥文件,不能被公开。而 cert.pem 是我们的公钥文件,在浏览器与服务器进行握手时会被发送给浏览器。

配置 Nginx

现在我们已经有了 SSL 证书,接下来我们需要配置 Nginx。

为了使用 HTTPS 协议,我们需要配置一个 SSL server block,并且将请求转发到我们的 Node.js 应用程序。在 Nginx 的配置文件中,我们需要添加以下内容:

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

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

在上面的配置中,我们监听了 443 端口并启用了 SSL。yourdomain.com 应该替换为你的域名;/path/to/cert.pem/path/to/key.pem 是你的 SSL 证书的路径。proxy_pass 将请求转发到我们的 Node.js 应用的端口(在这里是 3000),而 proxy_set_header 则是在请求头中设置了一些属性,以便于正确处理请求。

在添加了上述配置之后,我们需要重新启动 Nginx,以便于配置生效。在命令行中输入以下命令:

部署 Node.js 应用

接下来,我们需要使用 PM2 部署我们的 Node.js 应用。假设我们的应用文件是 app.js,我们可以通过以下命令来启动应用程序:

这样,我们的 Node.js 应用程序就已经可以使用了。但由于我们现在使用了 Nginx 作为反向代理,所以我们需要将应用程序的监听端口从 80 或 3000 改为其他端口,例如 8080。在应用程序的代码中,我们需要这样设置端口:

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

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

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

在上面的代码中,我们使用 Express 框架来创建一个 HTTP 服务器。process.env.PORT || 8080 是用于支持 Heroku 等 PaaS 平台的代码,若在自己的服务器上使用,则改为 8080 即可。

我们还需要使用 PM2 来管理我们的应用程序。在命令行中输入以下命令:

执行完成后,我们会得到一条命令,将其粘贴到命令行中,在执行这条命令之后,PM2 将会被配置为自动启动。

最后,我们需要将我们的应用程序添加到 Nginx 的反向代理中。在 Nginx 的配置文件中添加一个 server block:

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

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

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

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

在这里,我们监听了 80 和 8080 两个端口。在 80 端口的配置中,我们将所有的请求都重定向到 443 端口(HTTPS)。在 8080 端口的配置中,我们与之前一样,将请求通过反向代理转发到我们的 Node.js 应用程序。

总结

通过这篇文章,我们可以学习到如何使用 Nginx + PM2 实现 HTTPS 服务。在这个过程中,我们了解了如何生成 SSL 证书,如何配置 Nginx 和部署 Node.js 应用程序,并且给出了示例代码和详细的指导。当然,这只是一个基础的 HTTPS 服务实现方式,还有很多更为复杂和高效的方案,感兴趣的读者可以继续深入学习。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d44bf2b5eee0b525bd438d

纠错
反馈