UNPKG

catproxy

Version:

a node proxy or host change tools

60 lines (56 loc) 1.53 kB
// 创建一个https的代理服务器 import https from 'https'; import {getCert} from './cert/cert.js'; import {getPort} from './tools'; import Promise from 'promise'; import log from './log'; import tls from 'tls'; import util from 'util'; import {requestHandler, requestUpgradeHandler} from './requestSerives'; let SNICallback = (servername, callback) => { try { let {privateKey: key, cert} = getCert(servername); let ctx = tls.createSecureContext({key, cert}); callback(null, ctx); } catch (e) { log.error(e); callback(e); } }; export {SNICallback}; export default (host, port) => { if (!host) { throw new Error('host is must'); } return Promise.resolve(port) .then(p => { if (p) { return p; } else { return getPort(); } }) // 不支持sni的请求可能点了就没反应,SNICallback在客户端不支持的情况下,不会报错,会直接返回 .then(port => { let {privateKey: key, cert} = getCert(host); let server = https.createServer({ key, cert, SNICallback, rejectUnauthorized: false }, function(req, res) { if (req.headers.upgrade) { return; } requestHandler.call(this, req, res); }); server.on('upgrade', requestUpgradeHandler); server.on('clientError', function(err, con) { log.error('clientError', err); }); server.listen(port); server.on('error', err => log.error(err + 'inner https prxoy server err:' + err)); return {server, port}; }) .then(null, err => log.error('create https proxy server error:' + err)); };