mirror of
https://github.com/alibaba/anyproxy.git
synced 2025-05-10 06:48:26 +00:00
add https server mode
This commit is contained in:
parent
146cc6a021
commit
770d495440
58
index.js
58
index.js
@ -1,16 +1,50 @@
|
|||||||
var PROXY_PORT = 8001;
|
|
||||||
|
|
||||||
var http = require('http'),
|
var http = require('http'),
|
||||||
https = require('https'),
|
https = require('https'),
|
||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
net = require('net'),
|
net = require('net'),
|
||||||
url = require('url'),
|
url = require('url'),
|
||||||
exec = require('child_process').exec,
|
exec = require('child_process').exec,
|
||||||
serverMgr = require("./lib/serverMgr");
|
serverMgr = require("./lib/serverMgr"),
|
||||||
|
createCert= require("./lib/createCert");
|
||||||
|
|
||||||
var serverMgrInstance = new serverMgr();
|
var PROXY_PORT = 8001,
|
||||||
|
T_PROXY_HTTP = 0,
|
||||||
|
T_PROXY_HTTPS = 1,
|
||||||
|
PROXY_TYPE = T_PROXY_HTTPS,
|
||||||
|
HOSTNAME = "localhost";
|
||||||
|
|
||||||
var httpProxyServer = http.createServer(function (req, res) {
|
var serverMgrInstance = new serverMgr(),
|
||||||
|
httpProxyServer;
|
||||||
|
|
||||||
|
if(PROXY_TYPE == T_PROXY_HTTP){
|
||||||
|
httpProxyServer = http.createServer(dealProxyUserHttpReq);
|
||||||
|
}else{
|
||||||
|
|
||||||
|
var keyFile = "./cert/tmpCert/__hostname.key".replace(/__hostname/,HOSTNAME),
|
||||||
|
crtFile = "./cert/tmpCert/__hostname.crt".replace(/__hostname/,HOSTNAME);
|
||||||
|
|
||||||
|
if(!fs.existsSync(keyFile) || !fs.existsSync(crtFile)){
|
||||||
|
createCert(HOSTNAME,function(){
|
||||||
|
httpProxyServer = https.createServer({
|
||||||
|
key : fs.readFileSync(keyFile),
|
||||||
|
cert: fs.readFileSync(crtFile)
|
||||||
|
},dealProxyUserHttpReq);
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
httpProxyServer = https.createServer({
|
||||||
|
key : fs.readFileSync(keyFile),
|
||||||
|
cert: fs.readFileSync(crtFile)
|
||||||
|
},dealProxyUserHttpReq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//listen CONNECT method for https over http
|
||||||
|
httpProxyServer.on('connect',dealProxyConnectReq);
|
||||||
|
httpProxyServer.listen(PROXY_PORT);
|
||||||
|
console.log( (PROXY_TYPE == T_PROXY_HTTP ? "Http" : "Https") + " proxy started at port " + PROXY_PORT);
|
||||||
|
|
||||||
|
|
||||||
|
function dealProxyUserHttpReq(req,res){
|
||||||
var urlPattern = url.parse(req.url);
|
var urlPattern = url.parse(req.url);
|
||||||
var options = {
|
var options = {
|
||||||
hostname : urlPattern.host,
|
hostname : urlPattern.host,
|
||||||
@ -20,6 +54,7 @@ var httpProxyServer = http.createServer(function (req, res) {
|
|||||||
headers : req.headers
|
headers : req.headers
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//forward to real server
|
||||||
var directReq = http.request(options,function(directRes){
|
var directReq = http.request(options,function(directRes){
|
||||||
res.writeHead(directRes.statusCode , directRes.headers);
|
res.writeHead(directRes.statusCode , directRes.headers);
|
||||||
directRes.pipe(res);
|
directRes.pipe(res);
|
||||||
@ -30,11 +65,11 @@ var httpProxyServer = http.createServer(function (req, res) {
|
|||||||
res.end();
|
res.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
directReq.end();
|
directReq.end();
|
||||||
});
|
}
|
||||||
|
|
||||||
//connect method for HTTPS over http
|
|
||||||
httpProxyServer.on('connect', function(req, socket, head){
|
function dealProxyConnectReq(req, socket, head){
|
||||||
var hostname = req.url.split(":")[0];
|
var hostname = req.url.split(":")[0];
|
||||||
|
|
||||||
//forward the https-request to local https server
|
//forward the https-request to local https server
|
||||||
@ -55,7 +90,4 @@ httpProxyServer.on('connect', function(req, socket, head){
|
|||||||
console.log("err fetch HTTPS server for host:" + hostname);
|
console.log("err fetch HTTPS server for host:" + hostname);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
|
||||||
httpProxyServer.listen(PROXY_PORT);
|
|
||||||
console.log("proxy started at port " + PROXY_PORT);
|
|
||||||
|
15
lib/createCert.js
Normal file
15
lib/createCert.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
var exec = require('child_process').exec;
|
||||||
|
|
||||||
|
module.exports = function(hostname,callback){
|
||||||
|
console.log("creating cert for :" + hostname);
|
||||||
|
|
||||||
|
var cmd = "./gen-cer "+hostname;
|
||||||
|
exec(cmd,{cwd:"./cert/"},function(err,stdout,stderr){
|
||||||
|
if(err){
|
||||||
|
callback && callback(new Error("error when generating certificate"),null);
|
||||||
|
}else{
|
||||||
|
console.log("certificate created for __HOST".replace(/__HOST/,hostname));
|
||||||
|
callback(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -6,7 +6,7 @@ var getPort = require('./getPort'),
|
|||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
net = require('net'),
|
net = require('net'),
|
||||||
url = require('url'),
|
url = require('url'),
|
||||||
exec = require('child_process').exec;
|
createCert= require("./createCert");
|
||||||
|
|
||||||
if(!fs.existsSync("cert/tmpCert")){
|
if(!fs.existsSync("cert/tmpCert")){
|
||||||
fs.mkdirSync("cert/tmpCert");
|
fs.mkdirSync("cert/tmpCert");
|
||||||
@ -50,17 +50,7 @@ module.exports =function(){
|
|||||||
//create a cert for this hostname if not exists
|
//create a cert for this hostname if not exists
|
||||||
function(callback){
|
function(callback){
|
||||||
if(!fs.existsSync(keyFile) || !fs.existsSync(crtFile)){
|
if(!fs.existsSync(keyFile) || !fs.existsSync(crtFile)){
|
||||||
console.log("creating cert for :" + hostname);
|
createCert(hostname,callback)
|
||||||
|
|
||||||
var cmd = "./gen-cer "+hostname;
|
|
||||||
exec(cmd,{cwd:"./cert/"},function(err,stdout,stderr){
|
|
||||||
if(err){
|
|
||||||
callback && callback(new Error("error when generating certificate"),null);
|
|
||||||
}else{
|
|
||||||
console.log("certificate created for __HOST".replace(/__HOST/,hostname));
|
|
||||||
callback(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}else{
|
}else{
|
||||||
callback(null);
|
callback(null);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user