Node.js 使用 http-proxy 搭建代理服务器详解

作者:夜航船时间:2026-10-23 15:43:30浏览:615

本文介绍如何在 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 代理服务器的基本配置方法。

作者最新文章