UNPKG

procfiled

Version:

Node.js process manager for Procfile-based applications

77 lines (64 loc) 1.92 kB
// Copyright IBM Corp. 2012,2016. All Rights Reserved. // Node module: procfiled // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT var fs = require("fs"); var http = require("http"); var https = require("https"); var htproxy = require("http-proxy"); var port = parseInt(process.env.PORT); var upstream_host = process.env.UPSTREAM_HOST; var upstream_port = parseInt(process.env.UPSTREAM_PORT); var upstream_size = parseInt(process.env.UPSTREAM_SIZE); var sslCert = process.env.SSL_CERT; var sslKey = process.env.SSL_KEY; var sslPort = parseInt(process.env.SSL_PORT); var addresses = []; for (var i = 0; i < upstream_size; i++) { addresses.push({ host: upstream_host, port: upstream_port + i, protocol: "http", }); } // Proxy var proxy = htproxy.createProxyServer({ // Set the x-forwarded- headers, because apps often need them to make // decisions (such as about redirecting to SSL or a canonical host), // and proxies often do this for you in the real world. xfwd: true, }); // Hanle Error proxy.on("error", function (err, req, res) { console.error("Proxy Error: ", err); res.writeHead(500); res.write("Upstream Proxy Error"); res.end(); }); // Main HTTP Server http .createServer(function (req, res) { var target = addresses.shift(); proxy.web(req, res, { target: target }); addresses.push(target); }) .listen(port, function () { process.send({ http: this.address().port }); }); if (sslCert && sslKey) { https .createServer( { key: fs.readFileSync(sslKey), cert: fs.readFileSync(sslCert), }, function (req, res) { var target = addresses.shift(); proxy.web(req, res, { target: target }); addresses.push(target); } ) .listen(sslPort, function () { process.send({ https: this.address().port }); }); }