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 相关文章推荐
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 Javascript
基于JS实现省市联动效果代码分享
Jun 06 Javascript
JavaScript中splice与slice的区别
May 09 Javascript
JavaScript 保护变量不被随意修改的实现代码
Sep 27 Javascript
Angular实现下拉框模糊查询功能示例
Jan 03 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
微信小程序使用map组件实现解析经纬度功能示例
Jan 22 Javascript
微信小程序实现banner图轮播效果
Jun 28 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
js加减乘除精确运算方法实例代码
Jan 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
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
动态样式类封装JS代码
2009/09/02 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
Angular5.1新功能分享
2017/12/21 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python 识别图片中的文字信息方法
2018/05/10 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
如何用Python 加密文件
2020/09/10 Python
岗位竞聘演讲稿
2014/01/10 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
职称评定个人总结
2015/03/05 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL