const url = require('url') const net = require('net') const http = require('http') const https = require('https') const [HOST, PORT = 8000] = process.argv.slice(2) const target = url.parse(HOST.startsWith('http') ? HOST : `http://${HOST}`) console.log('Reverse proxy', target.href, '@', PORT) const server = http.createServer().listen(parseInt(PORT)) server.on('request', (req, res) => { req.pipe( (target.protocol === 'http:' ? http : https) .request({ ...url.parse(target.resolve(req.url)), host: target.hostname, method: req.method, headers: { ...req.headers, host: target.hostname } }) .on('response', proxyRes => { console.log(req.method, req.url, proxyRes.statusCode) res.writeHead(proxyRes.statusCode, proxyRes.headers) proxyRes.pipe(res) }) .on('error', () => res.end()) ) })