Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js+;快速代理ssl_Node.js_Ssl_Proxy_Express - Fatal编程技术网

Node.js+;快速代理ssl

Node.js+;快速代理ssl,node.js,ssl,proxy,express,Node.js,Ssl,Proxy,Express,我正在尝试使用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.createSer

我正在尝试使用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提供的现有库。如果你想自己写,至少要在学术上研究他们的源代码

关于上述方法的一些注意事项:

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

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

你可以试着用这个。

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

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


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

虽然我同意node http proxy是一种解决方案,但他实际上是在用app.all()对这些方法进行全局化处理,在从代理发送请求时,他想使用的不是get,而是express。我没有注意到这一点,因为我还没有尝试过任何帖子。至于节点http代理。。。我正在考虑使用它,但我找不到一种方法使其作为透明代理工作:(因此,您不能让已知可用的现有项目安装并运行,但您希望自己编写一个项目,或者让stackoverflow帮助您编写另一个项目?也许是时候退后一步,重新评估您在这个项目上的位置了,但祝您好运!问题是node http proxy似乎没有这样做的能力()…它将请求从一个已知的服务器代理到另一个服务器,我想要一个透明的代理,将所有内容代理到服务器(我的意思是…调用google.com,发送到server,server requestos google.com并返回响应)您看过像squid这样的实际http代理(而不是反向代理)项目吗?