Created
May 20, 2015 09:55
-
-
Save fangdingjun/99e57b2e2cc75368b7de to your computer and use it in GitHub Desktop.
The nodejs version of stunnel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var net=require("net"); | |
var tls = require("tls"); | |
/* listen address and port */ | |
var listen_host = "0.0.0.0"; | |
var listen_port = 8080; | |
/* the upstream https servers */ | |
var servers = [ | |
{host: "a.example.com",port:18080}, | |
{host: "b.example.com",port:18088}, | |
{host: "c.example.com",port:18080}, | |
{host: "d.example.com",port:18088} | |
]; | |
var index = 0; | |
var server = net.createServer(function(c){ | |
console.log("client connected from %s:%d", c.remoteAddress, c.remotePort); | |
var p = tls.connect(servers[index % 4], function(){ | |
console.log("connect to %s:%d success", p.remoteAddress, p.remotePort); | |
c.pipe(p); | |
p.pipe(c); | |
}); | |
index++; | |
p.on("error", function(e){ | |
console.log(e); | |
c.write("HTTP/1.1 503 service unaviable\r\n\r\n"); | |
c.end(); | |
}); | |
}); | |
server.listen(listen_port, listen_host, function(){ | |
addr = server.address(); | |
console.log("listening on %s:%d", addr.address, addr.port); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment