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中使用 http-proxy 创建代理服务器的更多相关文章
- node.js中使用http模块创建服务器和客户端
node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
- node.js中通过dgram数据报模块创建UDP服务器和客户端
node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...
- node.js中ws模块创建服务端和客户端,网页WebSocket客户端
首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...
- node.js中net模块创建服务器和客户端(TCP)
node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- Node.js 中MongoDB的基本接口操作
Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...
- 在node.js中使用COOKIE
node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...
- 初步揭秘node.js中的事件
当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...
- Node.js权威指南 (10) - Node.js中的错误处理与断言处理
10.1 使用domain模块处理错误 / 272 10.1.1 domain模块概述 / 272 10.1.2 创建并使用Domain对象 / 274 10.1.3 隐式绑定与显式绑定 / 276 ...
随机推荐
- windos下安装django
一:pip install Django 安装完以后,运行python manager.py runserver 0.0.0.0:8000报错: 1):没有安装Mysql-python ...
- LDAP学习总结
一.简介: LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议.目录是一个为查询.浏览和搜索而优化的数据库,它成树状结构组织数据,类 ...
- [转]Windows下使用VS2015编译openssl库
转自:http://blog.csdn.net/alger_magic/article/details/52584171 目标:编译vs环境下openssl库 工具: 1. 编译环境win10+vs2 ...
- 承接AR定制AR项目外包(正规公司,内附案例)
京团队长年承接AR项目外包 咨询QQ:372900288 微信:liuxiang0884 以下是AR项目案例演示,索取更多案例请通过以上方式在线联系我们
- 如何在Windows命令行(DOS界面)中调用 编译器 来编译C/C++源程序
首先说明一下背景: 为什么要在DOS界面编译C/C++源程序?有很多现成的开发环境(IDE)如:vs, vc++等,这些开发环境集成了编译,调试,使用起来很方便,而且图形化操作界面,简洁明了.但是在开 ...
- marathon 测试
marathon 初步使用 关闭selinux setenforce 0 Marathon之应用篇 先来了解一下 Marathon 是怎么布署decker的 json shell.json { } ...
- 洛谷P1605走迷宫
传送 这是一道dfs,但是...但是....但是它竟然被放在bfs练习题辣!!!! 打了半天bfs,发现路径不会标记了,于是发现好像有什么不对的,似乎dfs要简单一点,于是半路跑去打dfs,结果打了半 ...
- 常用JVM命令
查看当前所有jvm进程 ./jps -l -m ./jps -l -m -v 查看jvm进程内存堆使用情况 ./jstat -gc $pid 生成java虚拟机当前时刻的线程快照 jstack -l ...
- Linux系统编程——信号
目录 信号的介绍 信号的机制 信号的编号 Linux常规信号一览表 信号的产生 终端按键产生信号 硬件异常产生信号 kill函数/命令产生信号 信号的操作函数 信号集设定 sigprocmask函数 ...
- hessian的简单使用以及与spring整合
Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议.和其他Web服务的实现框架不同的是,Hessian是一个使用二进制格式传输的Web服务协议的框架,相对传统soap ...