我正在尝试使用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
让我知道您是否有任何问题。我愿意立即修复它们。