PM2 如何通过 Nginx 反向代理 Node.js 应用程序?

前言

在 Node.js 应用程序中,PM2 是一种非常受欢迎的进程管理器。PM2 可以帮助我们在生产环境中管理我们的 Node.js 应用程序,确保它们在崩溃或停止运行时能够自动重启。但是,将 Node.js 应用程序暴露到公共互联网时,我们通常需要使用反向代理来保护我们的 Node.js 应用程序,以防止它们受到攻击和滥用。这就是我们需要 Nginx 的地方。在本文中,我们将详细讨论如何使用 PM2 和 Nginx 如何将 Node.js 应用程序反向代理到公共互联网。

准备工作

在开始本文之前,我们需要安装和配置以下软件,以便我们能够在本地环境中运行 Node.js 应用程序和 Nginx。

  • Node.js:Node.js 是一个用于服务器端编程的运行时环境,它支持 JavaScript 语言。您可以从官方网站下载并安装 Node.js。
  • PM2:PM2 是一个进程管理器,它可以帮助我们在生产环境中管理 Node.js 应用程序。您可以使用 npm 来全局安装 PM2。
  • Nginx:Nginx 是一个用于反向代理、负载均衡和 Web 服务器应用程序。您可以从官方网站下载并安装 Nginx。

我们需要编写一个简单的 Node.js 应用程序来测试我们的反向代理设置。下面是一个简单的 Node.js 应用程序示例,它启动一个 HTTP 服务器并监听 3000 端口上的请求。

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
});

server.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

保存上述代码为 app.js 文件,并通过 PM2 启动应用程序:

$ pm2 start app.js

配置 Nginx 反向代理

在使用 Nginx 反向代理 Node.js 应用程序之前,我们需要对 Nginx 进行配置。以下是一个简单的 Nginx 配置文件示例,它将所有流量从 80 端口重定向到我们的 Node.js 应用程序运行的 3000 端口。

server {
    listen 80;
    server_name your-domain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

在上述 Nginx 配置文件示例中,我们首先指定监听的端口是 80,并指定服务器名称为 your-domain.com。在 location / 块中,我们配置 Nginx 反向代理到我们的 Node.js 应用程序上。我们使用 proxy_pass 指令将所有流量转发到 http://127.0.0.1:3000,这是我们 Node.js 应用程序监听的端口。我们还配置了一些代理头,例如 X-Real-IPX-Forwarded-For,以便我们获取客户端的真实 IP 地址。

请注意,为了使反向代理正常工作,您需要将 your-domain.com 替换为您自己的域名或 IP 地址。

将上述 Nginx 配置文件示例保存为 nginx.conf 文件,并将其放置在 Nginx 配置目录中。通常,该目录位于 /etc/nginx

最后,我们需要使用以下命令重新加载 Nginx 配置文件:

$ sudo systemctl reload nginx

现在,当我们访问 http://your-domain.com 时,请求将被重定向到我们的 Node.js 应用程序,并返回 “Hello World!” 消息。

总结

在本文中,我们介绍了如何使用 PM2 和 Nginx 将 Node.js 应用程序反向代理到公共互联网。我们还提供了一个简单的 Node.js 应用程序示例和一个基本的 Nginx 配置文件示例。如果您正在开发和生产 Node.js 应用程序,并希望将其安全、可靠地暴露到公共互联网上,那么 PM2 和 Nginx 是您必不可少的工具。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b5b715add4f0e0ffe76ddf