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的模块化:封装(闭包),继承(原型) 介绍
Jul 22 Javascript
Asp.Net alert弹出提示信息的几种方法总结
Jan 29 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
JavaScript中字符串拼接的基本方法
Jul 07 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
带你了解session和cookie作用原理区别和用法
Aug 14 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
js实现上传图片并显示图片名称
Dec 18 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 Javascript
构建一个JavaScript插件系统
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+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
围观tangram js库
2010/12/28 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python短信轰炸的代码
2020/03/25 Python
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
考试退步检讨书
2014/01/15 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
六一亲子活动感想
2015/08/07 职场文书
担保书怎么写 ?
2019/04/22 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android
Python requests用法和django后台处理详解
2022/03/19 Python
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers