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 相关文章推荐
IE6,IE7下js动态加载图片不显示错误
Jul 17 Javascript
angularjs基础教程
Dec 25 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
May 12 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
浅谈ES6 模板字符串的具体使用方法
Nov 07 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
Jan 09 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
Vue.js实现数据响应的方法
Aug 13 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
微信小程序仿今日头条导航栏滚动解析
Aug 20 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 Javascript
ElementUI中el-tree节点的操作的实现
Feb 27 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实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
JavaScript 序列化对象实现代码
2009/12/18 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
详解react-redux插件入门
2018/04/19 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Python发送邮件实现基础解析
2020/08/14 Python
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
个人简历的自荐信
2013/10/23 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
工程部主管岗位职责
2015/02/12 职场文书
信用卡工作证明范本
2015/06/19 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers