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 相关文章推荐
Javascript与jQuery方法的隐藏与显示
Jan 19 Javascript
JS的数组迭代方法
Feb 05 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
JavaScript Array对象详解
Mar 01 Javascript
JavaScript数组排序reverse()和sort()方法详解
Dec 24 Javascript
angular2实现统一的http请求头方法
Aug 13 Javascript
vue 登录滑动验证实现代码
Aug 24 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 Javascript
微信小程序 下拉刷新及上拉加载原理解析
Nov 06 Javascript
jquery实现聊天机器人
Feb 08 jQuery
js中!和!!的区别与用法
May 09 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
深入分析php之面向对象
2013/05/15 PHP
php防注入及开发安全详细解析
2013/08/09 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
对javascript继承的理解
2016/10/11 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
python爬取指定微信公众号文章
2018/12/20 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
在Python中实现字典反转案例
2020/12/05 Python
感恩寄语大全
2014/04/11 职场文书
高中生操行评语
2014/04/25 职场文书
同志主要表现材料
2014/08/21 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python