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重载函数的辅助方法2
Jul 04 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
javascript实现图像循环明暗变化的方法
Feb 25 Javascript
浅析JavaScript动画
Jun 10 Javascript
深入浅析JS Function()构造函数
Aug 22 Javascript
Node.js开发第三方微信公众平台
Jun 05 Javascript
Node解决简单重复问题系列之Excel内容的获取
Jan 02 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
vue3.0 搭建项目总结(详细步骤)
May 20 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 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
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
javascript 写类方式之二
2009/07/05 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
使用js画图之饼图
2015/01/12 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
java必学必会之static关键字
2015/12/03 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
SVG实现时钟效果
2018/07/17 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Python实现全角半角转换的方法
2014/08/18 Python
python生成器generator用法实例分析
2015/06/04 Python
python距离测量的方法
2018/03/06 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
个人工作主要事迹
2014/05/08 职场文书
暖春观后感
2015/06/08 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA