Nginx 通过 Rewrite 反向代理 Node.js

作者:编程家 分类: 编程代码 时间:2025-08-02

使用 Nginx 反向代理 Node.js 实现网站的负载均衡

Nginx 是一个高性能的开源的 HTTP 服务器和反向代理服务器,它可以通过 Rewrite 功能来实现反向代理。而 Node.js 是一个基于事件驱动的 JavaScript 运行环境,可以用于构建高性能的网络应用。本文将介绍如何使用 Nginx 反向代理 Node.js 实现网站的负载均衡。

背景介绍

在实际应用中,当网站的流量增加时,单个 Node.js 服务器可能无法满足高并发的需求,这时就需要使用负载均衡来分摊流量,提高网站的性能和可靠性。Nginx 反向代理可以将请求转发到多个 Node.js 服务器上,实现负载均衡。

安装和配置 Nginx

首先,需要安装 Nginx,并进行基本配置。可以使用以下命令进行安装:

sudo apt-get update

sudo apt-get install nginx

安装完成后,需要编辑 Nginx 的配置文件 `/etc/nginx/nginx.conf`,将默认的虚拟主机配置注释掉,然后添加一个新的虚拟主机配置。可以使用以下命令进行编辑:

sudo nano /etc/nginx/nginx.conf

在配置文件中找到以下部分:

http {

...

server {

...

}

}

将其注释掉,并添加一个新的虚拟主机配置:

http {

...

upstream backend {

server 127.0.0.1:3000;

server 127.0.0.1:3001;

}

server {

listen 80;

location / {

proxy_pass http://backend;

proxy_set_header Host $host;

}

}

}

在上面的配置中,我们使用了 `upstream` 关键字定义了一个名为 `backend` 的服务器组,里面包含了两个 Node.js 服务器的地址和端口。然后,在 `server` 部分的 `location` 配置中,使用了 `proxy_pass` 将请求转发到 `backend` 服务器组,并且设置了 `proxy_set_header` 将原始请求的 Host 头部信息传递给后端服务器。

保存并退出配置文件后,需要重启 Nginx 使配置生效:

sudo service nginx restart

配置 Node.js 服务器

接下来,需要在两台服务器上分别运行 Node.js 服务器。首先,需要安装 Node.js 并创建一个简单的服务器。可以使用以下命令进行安装:

sudo apt-get install nodejs

然后,创建一个名为 `server.js` 的文件,内容如下:

javascript

const http = require('http');

const server = http.createServer((req, res) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('Hello, World!\n');

});

server.listen(3000, '127.0.0.1', () => {

console.log('Server running at http://127.0.0.1:3000/');

});

保存并退出文件后,使用以下命令运行服务器:

node server.js

在另一台服务器上,创建一个名为 `server.js` 的文件,内容如下:

javascript

const http = require('http');

const server = http.createServer((req, res) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('Hello, Nginx!\n');

});

server.listen(3001, '127.0.0.1', () => {

console.log('Server running at http://127.0.0.1:3001/');

});

保存并退出文件后,使用以下命令运行服务器:

node server.js

测试负载均衡

完成以上配置后,可以通过访问 Nginx 的 IP 地址来测试负载均衡是否生效。由于 Nginx 默认监听了 80 端口,因此可以直接通过 IP 地址访问。在浏览器中输入 `http:///`,如果页面显示 `Hello, World!` 或 `Hello, Nginx!`,则说明负载均衡已经成功实现。

本文介绍了如何使用 Nginx 反向代理 Node.js 实现网站的负载均衡。通过配置 Nginx 的虚拟主机和使用 `upstream` 关键字定义服务器组,可以将请求转发到多个 Node.js 服务器上,实现负载均衡。这种方式可以提高网站的性能和可靠性,适用于高并发的场景。

参考代码

Nginx 配置文件 `/etc/nginx/nginx.conf`:

http {

...

upstream backend {

server 127.0.0.1:3000;

server 127.0.0.1:3001;

}

server {

listen 80;

location / {

proxy_pass http://backend;

proxy_set_header Host $host;

}

}

}

Node.js 服务器 1 `server.js`:

javascript

const http = require('http');

const server = http.createServer((req, res) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('Hello, World!\n');

});

server.listen(3000, '127.0.0.1', () => {

console.log('Server running at http://127.0.0.1:3000/');

});

Node.js 服务器 2 `server.js`:

javascript

const http = require('http');

const server = http.createServer((req, res) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('Hello, Nginx!\n');

});

server.listen(3001, '127.0.0.1', () => {

console.log('Server running at http://127.0.0.1:3001/');

});