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 ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
Mar 27 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
Apr 01 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
2014 年最热门的21款JavaScript框架推荐
Dec 25 Javascript
js实现固定显示区域内自动缩放图片的方法
Jul 18 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
Jun 16 Javascript
对js eval()函数的一些见解
Aug 15 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
微信小程序 POST请求的实例详解
Sep 29 Javascript
JS原生瀑布流效果实现
Apr 26 Javascript
基于vue.js实现购物车
Jan 15 Javascript
vue首次渲染全过程
Apr 21 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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
javascript下function声明一些小结
2007/12/28 Javascript
javascript call方法使用说明
2010/01/11 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python实现任意位置文件分割的实例
2018/12/14 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python命令行参数用法实例分析
2019/06/25 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
基于pandas中expand的作用详解
2019/12/17 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
学python需要去培训机构吗
2020/07/01 Python
利用python 读写csv文件
2020/09/10 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
毕业生的自我评价
2013/12/30 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
python glom模块的使用简介
2021/04/13 Python
小程序实现侧滑删除功能
2022/06/25 Javascript