Node.js: Proxy & HTTPS - mtjddnr/lab GitHub Wiki

node-http-proxy ์„ค์น˜

certsํ•˜์œ„๋กœ ๋„๋ฉ”์ธ๋ณ„ ์ธ์ฆ์„œ ํŒŒ์ผ์„ ์ค€๋น„

  • ์˜ˆ) domain.com.key, domain.com.crt, domain.com.ca-bundle
var https = require('https'),
    fs = require("fs"),
    crypto = require("crypto");
var httpProxy = require('http-proxy');


function getCredentialsContext(cer){
	return crypto.createCredentials({
	  	key:	fs.readFileSync('certs/' + cer + '.key'),
	  	cert:	fs.readFileSync('certs/' + cer + '.crt'),
	  	ca:		fs.readFileSync('certs/' + cer + '.ca-bundle')
	}).context;
}

var certs = {
	"domain.com":  getCredentialsContext("domain.com"),
  	"domain2.com": getCredentialsContext("domain2.com"),
  	"domain3.com": getCredentialsContext("domain3.com")
};
var defaultCer = "domain.com";

var options = {
	https: {
		SNICallback: function(hostname){
			return certs[hostname];
		},
		cert: fs.readFileSync('certs/' + defaultCer + '.crt'),
		key: fs.readFileSync('certs/' + defaultCer + '.key'),
		ca: fs.readFileSync('certs/' + defaultCer + '.ca-bundle')
	},
	hostnameOnly: true,
	router: {
		'domain.com':  '127.0.0.1:8080',
		'domain2.com': '127.0.0.1:8081',
		'domain3.com': '127.0.0.1:8082'
	}
};
httpProxy.createServer(options).listen(443);