node.js使用 http-proxy 创建代理服务器操作示例

 更新时间:2020年02月10日 12:52:33   作者:怀素真  
这篇文章主要介绍了node.js使用 http-proxy 创建代理服务器,结合实例形式分析了node.js使用 http-proxy 创建代理服务器原理、具体步骤与相关注意事项,需要的朋友可以参考下

本文实例讲述了node.js使用 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 端口时,proxy 会帮我们把请求代理到 9999 端口服务,然后返回数据。

二、通过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.js服务代码:

const http = require('http');
http.createServer(function (req, res) {
  res.end('port : 8888');
}).listen(8888, '0.0.0.0');

9999.js服务代码:

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程序设计有所帮助。

相关文章

  • Node.js 使用jade模板引擎的示例

    Node.js 使用jade模板引擎的示例

    本篇文章主要介绍了Node.js 使用jade模板引擎的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Node.js 去掉种子(torrent)文件里的邪恶信息

    Node.js 去掉种子(torrent)文件里的邪恶信息

    torrent文件,又被称为种子,原来只是用于记录 bt下载当中所需信息的一种文件。但是随着互联网的极大发展,一些人士将一些邪恶的信息注入到了小小的 torrent文件当中,种子从此变成了邪恶的代名词。
    2015-03-03
  • Node.js开发 path路径模块详解

    Node.js开发 path路径模块详解

    path 模块是 Node.js 官方提供的、用来处理路径的模块,它提供了一系列的方法和属性,用来满足用户对路径的处理需求,这篇文章主要介绍了Node.js开发 path路径模块,需要的朋友可以参考下
    2024-02-02
  • node.js中的fs.writeFileSync方法使用说明

    node.js中的fs.writeFileSync方法使用说明

    这篇文章主要介绍了node.js中的fs.writeFileSync方法使用说明,本文介绍了fs.writeFileSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 一文详解Node中module.exports和exports区别

    一文详解Node中module.exports和exports区别

    这篇文章主要介绍了一文详解Node中module.exports和exports区别
    2023-03-03
  • 前端如何更好的展示后端返回的十万条数据

    前端如何更好的展示后端返回的十万条数据

    这篇文章主要为大家介绍了前端如何更好的展示后端返回的十万条数据,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • Nodejs抓取html页面内容(推荐)

    Nodejs抓取html页面内容(推荐)

    这篇文章主要介绍了Nodejs抓取html页面内容的关键代码,另外还给大家附上了nodejs抓取网页内容,非常不错,对node.js抓取页面内容感兴趣的朋友一起学习吧
    2016-08-08
  • Nodejs学习item【入门手上】

    Nodejs学习item【入门手上】

    这篇文章主要介绍了Nodejs学习item【入门手上】,需要的朋友可以参考下
    2016-05-05
  • Node.js实现mysql连接池使用事务自动回收连接的方法示例

    Node.js实现mysql连接池使用事务自动回收连接的方法示例

    这篇文章主要介绍了Node.js实现mysql连接池使用事务自动回收连接的方法,结合实例形式分析了node.js操作mysql连接池实现基于事务的连接回收操作相关技巧,需要的朋友可以参考下
    2018-02-02
  • 基于Node.js模板引擎教程-jade速学与实战1

    基于Node.js模板引擎教程-jade速学与实战1

    下面小编就为大家带来一篇基于Node.js模板引擎教程-jade速学与实战1。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论