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


Posted in Javascript onFebruary 10, 2020

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 Javascript
javascript改变position值实现菜单滚动至顶部后固定
Jan 18 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
node.js下when.js 的异步编程实践
Dec 03 Javascript
JavaScript前补零操作实例
Mar 11 Javascript
js实现图片轮播效果
Dec 19 Javascript
Javascript数组循环遍历之forEach详解
Nov 07 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
解决axios发送post请求返回400状态码的问题
Aug 11 Javascript
Angular6 正则表达式允许输入部分中文字符
Sep 10 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
js代码实现轮播图
May 04 Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 #Javascript
js实现登录拖拽窗口
Feb 10 #Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 #Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 #Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 #Javascript
webpack打包优化的几个方法总结
Feb 10 #Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 #Javascript
You might like
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
为数据添加append,remove功能
2006/10/03 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
javascript每日必学之继承
2016/02/23 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
小车司机岗位职责
2013/11/25 职场文书
资产经营总监岗位职责
2013/12/04 职场文书
投资建议书模板
2014/05/12 职场文书
职工小家建设活动方案
2014/08/25 职场文书
2015年女生节活动总结
2015/02/27 职场文书
观看建国大业观后感
2015/06/01 职场文书
政审证明范文
2015/06/19 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python