1 | var http = require('http');
|
2 | var htproxy = require('http-proxy');
|
3 |
|
4 | var port = parseInt(process.env.PORT);
|
5 | var host = process.env.HOST;
|
6 |
|
7 | var upstream_host = process.env.UPSTREAM_HOST;
|
8 | var upstream_port = parseInt(process.env.UPSTREAM_PORT);
|
9 | var upstream_size = parseInt(process.env.UPSTREAM_SIZE);
|
10 |
|
11 | var addresses = [];
|
12 | for(i=0;i<upstream_size;i++){
|
13 | addresses.push({
|
14 | host: upstream_host,
|
15 | port: upstream_port + i,
|
16 | protocol: 'http',
|
17 | });
|
18 | }
|
19 |
|
20 |
|
21 | var proxy = htproxy.createProxyServer();
|
22 |
|
23 |
|
24 | proxy.on('proxyError',function(err,req,res){
|
25 | console.error("Proxy Error: ",err);
|
26 | res.writeHead(500);
|
27 | res.write("Upstream Proxy Error");
|
28 | res.end();
|
29 | });
|
30 |
|
31 |
|
32 | http.createServer(function (req, res) {
|
33 |
|
34 | var target = addresses.shift();
|
35 |
|
36 | proxy.web(req, res, {target: target});
|
37 |
|
38 | addresses.push(target);
|
39 |
|
40 | }).listen(port,function(){
|
41 | if (process.getuid && process.setuid &&
|
42 | process.env.SUDO_USER && process.getuid() == 0)
|
43 | process.setuid(process.env.SUDO_USER);
|
44 | })
|