Skip to content

Instantly share code, notes, and snippets.

@fangdingjun
Created May 20, 2015 09:55
Show Gist options
  • Save fangdingjun/99e57b2e2cc75368b7de to your computer and use it in GitHub Desktop.
Save fangdingjun/99e57b2e2cc75368b7de to your computer and use it in GitHub Desktop.
The nodejs version of stunnel
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