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 相关文章推荐
JS 对象介绍
Jan 20 Javascript
intro.js 页面引导简单用法 分享
Aug 06 Javascript
怎么选择Javascript框架(Javascript Framework)
Nov 22 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
js实时获取并显示当前时间的方法
Jul 31 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
基于jQuery实现仿百度首页选项卡切换效果
May 29 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
springMVC结合AjaxForm上传文件
Jul 12 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
利用npm 安装删除模块的方法
May 15 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
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 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php实现文件下载更能介绍
2012/11/23 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
Python中的引用和拷贝浅析
2014/11/22 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
python实现决策树分类算法
2017/12/21 Python
Django权限机制实现代码详解
2018/02/05 Python
使用python+whoosh实现全文检索
2019/12/09 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
优秀实习自我鉴定
2013/12/04 职场文书
工作鉴定评语
2014/05/04 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
大学迎新生标语
2014/10/06 职场文书
员工自我评价范文
2015/03/11 职场文书
情感电台广播稿
2015/08/18 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP