如何使用节点正确创建HTTPS透明代理服务器?

时间:2017-07-07 12:52:25

标签: node.js https proxy

我正在使用声称对此有所帮助的npm包http-proxy,但我完全无法使其正常工作。到目前为止,我只是通过制作透明的HTTP代理服务器获得了成功,但是当它创建一个透明的HTTPS代理服务器时,没有任何反应。

我正在使用Android设备配置为使用代理期望配置的端口的代理,但在nodejs端没有触发任何内容。只有当我配置了HTTP代理服务器时,事情似乎才有效。

这是我对HTTPS的代码:

var https = require('https');
var fs = require('fs');
var httpProxy = require('http-proxy');

var options = {
    key: fs.readFileSync('./client-key.pem', 'utf8'),
    cert: fs.readFileSync('./client-cert.pem', 'utf8')
};

var proxy = httpProxy.createProxyServer({
    ssl: options
});

https.createServer(options, function (req, res) {
    console.log("new", req.url);
    proxy.web(req, res, {
        target: req.url
    });
}).listen(8000);

如果我使用http包中的createServer,那么它适用于http调用(因为触发了回调),但不适用于带有这些指令的https。谁知道我做错了什么?

PS:我不在乎是否必须使用不同的npm包。

1 个答案:

答案 0 :(得分:0)

你可以使用https://www.npmjs.com/package/transparent-proxy

它是在扩展原生 net.createServer 的基础上构建的。它就像一个真正的透明 http 代理,它允许你,例如,轻松地向其他代理发送上游请求,并通过多个代理进行一些请求链接......等等......

安装

npm i transparent-proxy

使用

const ProxyServer = require('transparent-proxy');

//init ProxyServer
const server = new ProxyServer();

//starting server on port 8080
server.listen(8080, '0.0.0.0', function () {
    console.log('TCP-Proxy-Server started!', server.address());
});

它也适用于 Termux :)