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 最佳实践
Oct 30 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
jQuery中detach()方法用法实例
Dec 25 Javascript
谈谈JavaScript异步函数发展历程
Sep 29 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
AngularJS中$apply方法和$watch方法用法总结
Dec 13 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
VSCode中如何利用d.ts文件进行js智能提示
Apr 13 Javascript
Vue.js 利用v-for中的index值实现隔行变色
Aug 01 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
vscode 调试 node.js的方法步骤
Sep 15 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设计模式 Mediator (中介者模式)
2011/06/26 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python中wheel的用法整理
2020/06/15 Python
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
垃圾回收的优点和原理
2014/05/16 面试题
金融专业推荐信
2013/11/14 职场文书
工作建议书范文
2014/05/13 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android