使用 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

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

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2017-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏测试驿栈

Jenkins配置报告与邮件插件

  我们先装一个Report插件,在系统管理-管理插件中找  HTML Publisher plugin 插件并安装

3992
来自专栏Java后端生活

Linux(十五)进程管理

2528
来自专栏古时的风筝

django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5

前面说完了此项目的创建及数据模型设计的过程。如果未看过,可以到这里查看,并且项目源码已经放大到github上,可以去这里下载。 代码也已经部署到sina sea...

2949
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用uWSGI和Nginx为Django应用程序提供服务

Django是一个功能强大的Web框架,可以帮助您实现Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何与生...

1170
来自专栏Golang语言社区

【Golang语言社区】前端编程-手机端调试利器 - 总结与实践

一些调试工具 说起手机端调试,相比大家都不陌生。 由于手机浏览器没有像PC端浏览器一样有开发调试工具,所以一般手机端的调试都要借助于电脑,现在的调试方式通常有以...

4854
来自专栏xcywt

《Linux命令行与shell脚本编程大全》 第七章理解Linux文件权限

Linux沿用了Unix文件权限的方法,允许用户和组根据每个文件和目录的安全性设置来访问文件。 用户权限通过创建用户时分配的用户ID(UID)来跟踪的。每个用户...

2275
来自专栏Jerry的SAP技术分享

一种不通过UI给C4C自定义BO创建测试数据的方式

假设我在Cloud Studio里创建了如下一个非常简单的自定义BO:

2299
来自专栏张伟博客

如何使用 Git 和 GitHub 来管理自己的代码

    点击右上角加号箭头,在弹出的菜单中选择 "New repository" 选项进行仓库配置。

1382
来自专栏代码散人

利用XCode Targets创建多scheme的iOS项目

在我们的开发iOS的时候,通常会遇到一个项目打包成多个环境的问题,也会遇到一套代码打包成多个项目的问题,最常用的做法是写一个配置文件,在打包的时候修改一下配置文...

1344
来自专栏FreeBuf

WPScan使用完整攻略:如何对WordPress站点进行安全测试

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用PHP编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和Wo...

2460

扫码关注云+社区

领取腾讯云代金券