前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 NodeJS 实现反向代理

使用 NodeJS 实现反向代理

作者头像
dys
发布2018-04-04 11:41:10
6K0
发布2018-04-04 11:41:10
举报
文章被收录于专栏:性能与架构性能与架构

为什么使用 Node.js 实现反向代理

提到 反向代理 时我们通常会想到 Nginx,它配置简单,性能很好

那么使用 Node.js 实现反向代理有什么必要呢?

一个典型的使用场景就是 微服务网关

服务网关就有反向代理的功能

后端有很多个服务,每个服务又可能由多个一起提供服务,对于客户端来说,不需要关心这些服务的细节,只需要和网关打交道,由服务网关来指定服务提供者

后端具体有哪些可用的服务,是动态的,例如有问题的服务下线、新服务上线,在这种动态场景下,Nginx 就不太适合了,使用 Node.js 来做服务网关的话会更方便一些

例如 所有的 service 都去 ZooKeeper 中注册,Node.js 去 ZooKeeper 中动态获取可用服务列表

实现方式

Node.js 的 Http Proxy 模块可以轻松实现反向代理的功能

(1)安装 Http Proxy

代码语言:javascript
复制
npm install http-proxy

(2)创建模拟后端服务的server

service.js(监听 8000)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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

代码语言:javascript
复制
node service.js

再启动 proxy.js

代码语言:javascript
复制
node proxy.js

浏览器中访问 proxy

代码语言:javascript
复制
http://localhost:8080/

可以看到 service 输出的信息 I'm service A

实现了反向代理的基本功能

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么使用 Node.js 实现反向代理
  • 实现方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档