0

我正在尝试使用 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);
});

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

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

4

2 回答 2

1

我的建议是使用来自 Nodejitsu的现有库node-http-proxy 。如果你想自己写,至少在学术上研究他们的源代码。

关于上述方法的一些说明:

  • 除了 GET(POST、PUT、DELETE 等)之外,您没有处理 HTTP 方法。这些存在。如果您希望您的代理实际工作,您必须处理它们。每次调用request(req.url)时,request默认情况下都会发出 GET 请求。
于 2012-11-09T15:32:23.587 回答
1

对于 HTTPS,您需要能够处理 HTTP 连接并模拟目标服务器。您需要为此持有证书。

你可以试试用这个。 https://github.com/noeltimothy/noelsproxy

复制包含证书和密钥的目录“magical”,然后使用 noelsproxy。请记住将 ca.pem 添加到系统上受信任的根存储中。

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

如果您有任何问题,请告诉我。我愿意立即修复它们。

于 2016-09-05T11:50:19.177 回答