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 相关文章推荐
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
HTML颜色选择器实现代码
Nov 23 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
Dec 29 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
jQueryUI DatePicker 添加时分秒
Jun 04 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
Jun 14 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
Apr 23 Javascript
jQuery接受后台传递的List的实例详解
Aug 02 jQuery
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 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
xml+php动态载入与分页
2006/10/09 PHP
功能强大的php分页函数
2016/07/20 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
JavaScript的目的分析
2007/01/05 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
python turtle 绘制太极图的实例
2019/12/18 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python numpy库np.percentile用法说明
2020/06/08 Python
python中数字是否为可变类型
2020/07/08 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
聚美优品陈欧广告词
2014/03/14 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS