本文介绍如何在 Node.js 中利用 http-proxy 模块搭建代理服务器。内容涵盖正向与反向代理的概念,演示单端口代理及基于 Host 头实现多虚拟主机共用端口的配置方法,并提供完整代码示例。
Node.js http-proxy 代理服务器搭建教程
本文介绍 Node.js 中利用 http-proxy 模块搭建代理服务器的具体操作方法,供开发者参考。
网络代理是一种特殊的服务机制,允许终端通过代理服务器与目标终端建立非直连通信,从而提升安全性并降低直接暴露的风险。
代理服务器的核心功能是作为网络用户获取信息的中介,负责接收请求并转发至目标服务器。
根据代理方向的不同,主要分为正向代理和反向代理两种类型。
- 正向代理主要用于协助局域网内部用户访问外部网络服务。
- 反向代理则用于帮助外部用户访问局域网内部部署的服务。
安装 http-proxy 依赖
首先需要在项目中安装 http-proxy 依赖库。
npm install http-proxy --save
配置单端口代理
接下来演示如何配置代理以指向本地其他服务。
const http = require('http');
const httpProxy = require('http-proxy');
//创建一个代理服务
const proxy = httpProxy.createProxyServer();
//创建http服务器并监听8888端口
let server = http.createServer(function (req, res) {
//将用户的请求转发到本地9999端口上
proxy.web(req, res, {
target: 'http://localhost:9999'
});
//监听代理服务错误
proxy.on('error', function (err) {
console.log(err);
});
});
server.listen(8888, '0.0.0.0');
以下是监听 9999 端口的目标服务代码示例。
const http = require('http');
http.createServer(function (req, res) {
res.end('port : 9999');
}).listen(9999, '0.0.0.0');
当客户端访问 8888 端口时,代理服务器会将请求转发至 9999 端口的服务,并将响应数据返回给客户端。
基于 Host 头的多虚拟主机代理
此外,可以通过配置 Host 头实现多个虚拟主机共享同一个监听端口。
const http = require('http');
const httpProxy = require('http-proxy');
//创建一个代理服务
const proxy = httpProxy.createProxyServer();
//虚拟主机
const hosts = {
'www.a.me': 'http://localhost:8888',
'www.b.me': 'http://localhost:9999',
};
//创建http服务器并监听80端口
let server = http.createServer(function (req, res) {
//获取主机名
let host = req.headers['host'];
host = host.split(':')[0];
//根据主机名,找到要代理的服务
let target = hosts[host];
if (target) {
proxy.web(req, res, {
target: target
});
proxy.on('error', function (err) {
console.log(err);
});
} else {
res.end('end');
}
});
server.listen(80, '0.0.0.0');
以下是监听 8888 端口的服务代码示例。
const http = require('http');
http.createServer(function (req, res) {
res.end('port : 8888');
}).listen(8888, '0.0.0.0');
以下是监听 9999 端口的服务代码示例。
const http = require('http');
http.createServer(function (req, res) {
res.end('port : 9999');
}).listen(9999, '0.0.0.0');
注意 www.a.me 和 www.b.me 这两个域名需加入 C:\Windows\System32\drivers\etc\hosts 文件中。
配置内容如下: 127.0.0.1 www.a.me 127.0.0.1 www.b.me
配置完成后,访问 www.a.me 或 www.b.me 时,系统会自动根据域名将请求代理到对应的目标端口服务。
希望上述内容能帮助读者掌握 Node.js 代理服务器的基本配置方法。