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 相关文章推荐
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
Jul 26 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
Dec 19 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
js获取键盘按键响应事件(兼容各浏览器)
May 16 Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
Jan 12 Javascript
JS获取子窗口中返回的数据实现方法
May 28 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
Mar 30 Javascript
微信小程序新增的拖动组件movable-view使用教程
May 20 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
微信小程序云开发之使用云数据库
May 17 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
javascript multibox 全选
2009/03/22 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
javascript中的this详解
2014/12/08 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
python实现图片横向和纵向拼接
2020/03/05 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
退税申请报告怎么写
2015/05/18 职场文书
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers