前言
在 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-IP
和 X-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