Node.js+express proxy ssl



我正在尝试使用express在node.js中编写反向代理,并且它适合HTTP请求。问题在于,当请求HTTPS时,它永远不会响应,浏览器指出代理拒绝连接。这是HTTP请求的工作代码:

var   app = express(),
      http=require('http');
app.configure(function(){ /* express stuff to log and use routes and the like */ });
http.createServer(app).listen(8000, function(){
  console.log("Express server listening on port " + 8000);
});
app.all('*', proxy);
var request=require('request');
var proxy=function(req,resp){
    var data={
        url:req.url,
        headers: {
            'Connection': 'keep-alive'
        }
    }
    var proxy=request(req.url);
    proxy.pipe(resp);
}

现在,至于SSL,我目前正在尝试:

var https=require('https'),
    fs=require('fs');
https.createServer({
        key: fs.readFileSync(__dirname+'/ssl/server.key', 'utf8'),
        cert: fs.readFileSync(__dirname+'/ssl/server.crt', 'utf8')
      },app).listen(8001, function(){
  console.log("Express server listening on port " + 8001);
});

可以从需要http的50.56.195.215:8000和SSL的50.56.195.215:8001的任何地方使用代理。它没有任何安全性,所以不要登录任何重要的东西= d

我正在使用自签名的SSL证书,我想尝试做这样的事情很愚蠢,但我没有任何想法:p

我的建议是使用nodejitsu的出色现有库node-http-proxy。如果您想编写自己的文章,至少要在学术上研究他们的源代码。

上面您的方法上的一些注释:

  • 除了获取(发布,放置,删除等)以外,您没有处理HTTP方法。这些存在。如果您希望您的代理实际工作,则必须处理它们。每次您致电request(req.url)时,request都会默认提出GET请求。

对于HTTPS,您需要能够处理HTTP连接并模仿目标服务器。您将需要为此提供证书。

您可以尝试使用此功能。https://github.com/noeltimothy/noelsproxy

复制包含证书和键的目录"魔术",然后使用noelsproxy。请记住将CA.PEM添加到系统上可信赖的根存储中。

如果您使用的是Windows,请执行此操作:certutil -addstore -enterprise -f " root " ./magical/ca.pem

让我知道您是否有任何问题。我愿意立即修复它们。

最新更新