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 相关文章推荐
取得父标签
Nov 14 Javascript
jquery 跨域访问问题解决方法(笔记)
Jun 08 Javascript
解析瀑布流布局:JS+绝对定位的实现
May 08 Javascript
javascript实现跳转菜单的具体方法
Jul 05 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
ashx文件获取$.ajax()方法发送的数据
May 26 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
Oct 26 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
Aug 13 Javascript
Iview Table组件中各种组件扩展的使用
Oct 20 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
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
js document.write()使用介绍
2014/02/21 Javascript
jQuery对val和atrr("value")赋值的区别介绍
2014/09/26 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
浅析Python中的for 循环
2016/06/09 Python
python将回车作为输入内容的实例
2018/06/23 Python
python实现淘宝购物系统
2019/10/25 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
详解python变量与数据类型
2020/08/25 Python
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
大门门卫岗位职责
2013/11/30 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
中班中秋节活动反思
2014/02/18 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
班主任对学生的评语
2014/04/26 职场文书
土建施工员岗位职责
2014/07/16 职场文书
辞职信怎么写
2015/02/27 职场文书
2015年教师国培感言
2015/08/01 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python