使用 NodeJS 实现反向代理
Posted 性能与架构
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 NodeJS 实现反向代理相关的知识,希望对你有一定的参考价值。
为什么使用 Node.js 实现反向代理
提到 反向代理 时我们通常会想到 nginx,它配置简单,性能很好
那么使用 Node.js 实现反向代理有什么必要呢?
一个典型的使用场景就是 微服务网关
服务网关就有反向代理的功能
后端有很多个服务,每个服务又可能由多个一起提供服务,对于客户端来说,不需要关心这些服务的细节,只需要和网关打交道,由服务网关来指定服务提供者
后端具体有哪些可用的服务,是动态的,例如有问题的服务下线、新服务上线,在这种动态场景下,Nginx 就不太适合了,使用 Node.js 来做服务网关的话会更方便一些
例如 所有的 service 都去 ZooKeeper 中注册,Node.js 去 ZooKeeper 中动态获取可用服务列表
实现方式
Node.js 的 Http Proxy 模块可以轻松实现反向代理的功能
(1)安装 Http Proxy
npm install http-proxy
(2)创建模拟后端服务的server
service.js(监听 8000)
var http = require("http");
http.createServer(function(request, response) {
console.log('request received');
response.writeHead(200, {
"Content-Type": "text/plain"
});
response.write("I'm service A");
response.end();
}).listen(8000);
console.log('service started');
(3)创建反向代理server
proxy.js(监听 8080)
var http = require('http')
var httpProxy = require('http-proxy')
var proxy = httpProxy.createProxyServer();
proxy.on('error', function(err, req, res) {
res.end();
});
var proxy_server = http.createServer(function(req, res) {
proxy.web(req, res, {
target: 'http://localhost:8000'
});
});
proxy_server.listen(8080, function() {
console.log('proxy server is running ');
});
(4)测试
先启动 service.js
node service.js
再启动 proxy.js
node proxy.js
浏览器中访问 proxy
http://localhost:8080/
可以看到 service 输出的信息 I'm service A
实现了反向代理的基本功能
点击 “阅读原文” 查看 文章列表
以上是关于使用 NodeJS 实现反向代理的主要内容,如果未能解决你的问题,请参考以下文章
腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理
NodeJsLinux安装NodeJs并配合Nginx实现反向代理
在Server2003上配置nginx反向代理nodejs。