Nodejs实现TCP反向代理

场景:

你有若干机器,却只有一台能被外网访问,如果要让外网访问到你其它机器上的服务,就需要做反向代理,在上一篇文章中,我们用nodejs轻松实现了http反向代理。如果是TCP服务,例如mysql数据库,同样用nodejs来做实现一个反向代理也是很容易的。

第一种方式:

var net = require(‘net‘);
// parse "80" and "localhost:80" or even "42mEANINg-life.com:80"
var addrRegex = /^(([a-zA-Z\-\.0-9]+):)?(\d+)$/;
var addr = {
        from: addrRegex.exec(process.argv[2]),
        to: addrRegex.exec(process.argv[3])
};

if (!addr.from || !addr.to) {
        console.log(‘Usage: <from> <to>‘);
        return;
}

net.createServer(function(from) {
        var to = net.createConnection({
                host: addr.to[2],
                port: addr.to[3]
                });
        from.pipe(to);
        to.pipe(from);
}).listen(addr.from[3], addr.from[2]);

以上代码存到文件forwarder.js,使用方式:

node forwarder.js 3306 192.168.1.11:3306

第一个参数是本机监听的端口,第二个参数是要转发到目标机器的ip和端口。怎么样,是不是很简单呢。

第二种方式:

var net = require(‘net‘);

var LOCAL_PORT  = 3306;
var REMOTE_PORT = 3306;
var REMOTE_ADDR = "192.168.1.11";

var server = net.createServer(function (socket) {
    socket.on(‘data‘, function (msg) {
        console.log(‘  ** START **‘);
        console.log(‘<< From client to proxy ‘, msg.toString());
        var serviceSocket = new net.Socket();
        serviceSocket.connect(parseInt(REMOTE_PORT), REMOTE_ADDR, function () {
            console.log(‘>> From proxy to remote‘, msg.toString());
            serviceSocket.write(msg);
        });
        serviceSocket.on("data", function (data) {
            console.log(‘<< From remote to proxy‘, data.toString());
            socket.write(data);
            console.log(‘>> From proxy to client‘, data.toString());
        });
    });
});

server.listen(LOCAL_PORT);
console.log("TCP server accepting connection on port: " + LOCAL_PORT);

第一种方式使用了socoket的pipe,第二种相当于自己实现了pipe功能。

Nodejs实现TCP反向代理

时间: 2024-08-30 13:59:14

Nodejs实现TCP反向代理的相关文章

用nginx TCP反向代理作mail邮件代理

用nginx TCP反向代理作mail邮件代理 用nginx TCP反向代理作mail邮件代理 1. 背景 2. Nginx安装(包括nginx_upstream_check_module) 3. Nginx配置 4. 总结 1. 背景 新版本nginx有TCP反向代理功能,nginx的mail proxy配置认证又太麻烦,于是就想用TCP反向功能作mail代理. 2. Nginx安装(包括nginx_upstream_check_module) cd /tmptar zxf pcre-8.35

nginx以upstream分组的方式实现tcp反向代理

nginx以upstream分组的方式实现tcp反向代理 nginx在1.9版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载均衡,udp主要用于DNS的域名解析,其配置方式和指令和http代理类似,其基于ngx_steam_proxy_module模块实现tcp负载,另外基于ngx_stream_upstream_module实现后端服务器的分组转发.权重分配.状态监测.调度算法等高级功能官方文档的example: worker_processes auto; err

nginx之TCP反向代理

nginx从1.9.0版本以后支持面向TCP的反向代理.莫约是2015年初发布的. 注:如今最新版nginx为1.11.12 nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译需添加--with-stream配置参数,stream负载均衡官方配置样例 配置编译的时候需要加上 先切换到nginx解压后目录内 # ./configure --prefix=/usr/local/nginx --user=www --group=www --wi

Nodejs绑定域名与反向代理

所有的Demo都不是完整的程序,所有未上线的程序都仅仅是个Demo; Nodejs作为Web开发的后起之秀,在现在的国内环境下,虽比不上PHP的火热,没有.net那么广大的群众基础,盖不过Java的高大上,但Nodejs基于谷歌V8引擎的极速,异步IO与事件模型,无疑将是Web开发的重大革新:我是一个小前端,自从知道Nodejs,就觊觎其好久,翘首以盼终于在业余用Express4.x断断续续做了一个个人博客: 为了让我的博客不只是一个躺在本地的Demo,我买了个服务器,搭建好环境,选好日子,准备

腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理

本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理. 笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑,可以按本文的步骤进行安装部署. 一. 新版 nodejs 安装 这里强烈推荐使用 nvm (Node版本管理器),其它方式的安装或多或少都有些问题. 具体步骤如下: 1. 通过 git 指令下载nvm 执行指令如下,我们把nvm下载到 /root/git/ 中去(记得要先安装 git): [[em

Nginx实现TCP反向代理

默认Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,还需要在编译时增加tcp代理模块支持,即nginx_tcp_proxy_module 下面操作步骤只让nginx支持tcp_proxy,没有加入prce.gzip.ssl等功能,如需要,可自行在编译时加上相关参数. wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip unzip master cd nginx-1.6.2

Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程

1. 下载安装nginx 注意 因为stream 并不是 nginx自带的module  所以需要 在安装是 通过 --with 的方式增加上. 下载必要的程序包 # openssl wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz #zilib wget http://www.zlib.net/zlib-1.2.11.tar.gz #pcre wget https://netix.dl.sourceforge.net/proje

Nginx Tcp反向代理

nginx tcp代理功能由nginx_tcp_proxy_module模块提供,同时监测后端主机状态.该模块包括的模块有: ngx_tcp_module, ngx_tcp_core_module, ngx_tcp_upstream_module, ngx_tcp_proxy_module, ngx_tcp_upstream_ip_hash_module. 1. 安装 # wget http://nginx.org/download/nginx-1.4.4.tar.gz # tar zxvf n

基于nginx和tengine的tcp反向代理,负载均衡 安装和配置

先下载nginx_tcp_proxy_module模块. wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip 先看看自己原来nginx安装有哪些模块(编译参数): [[email protected]]# /tengine/sbin/nginx -VTengine version: Tengine/2.1.1 (nginx/1.6.2)built by gcc 4.4.7 20120313 (Re