我如何正确代理https请求到另一个https服务器的cordova

时间:2015-06-17 22:03:37

标签: node.js cordova ssl https proxy

我的系统上运行了许多不同的服务器,它们都在自己的端口上运行安全连接等.50001,50002,50003 ...
所有这些都可以直接从https://domain1.com:50001 ...获取 现在,我不仅要限制端口数量,还要更改域等等。

https://domain1.com:50001 <- https://srv1.domain2.com:443  
https://domain1.com:50002 <- https://srv2.domain2.com:443  
https://domain1.com:50003 <- https://srv3.domain2.com:443  

所有服务器都运行单独的nodejs实例。

现在我想构建一个代理而不是重定向它,我选择了nodejs,因为我们所做的一切都是在nodejs中。

我现在拥有的:

var app = require('express')();
var options = {
    key  : fs.readFileSync(CONFIG.sslKey).toString(),
    cert : fs.readFileSync(CONFIG.sslCertificate).toString(),
    ca   : fs.readFileSync(CONFIG.sslCA).toString()
};
var http = require('https').Server(options,app);
var httpProxy = require('http-proxy');

var proxy = httpProxy.createProxyServer({
    ssl: {
             key  : fs.readFileSync(CONFIGsecure.sslKey).toString(),
             cert : fs.readFileSync(CONFIGsecure.sslCertificate).toString(),
             ca   : fs.readFileSync(CONFIGsecure.sslCA).toString()
         },
    secure: true
});

var handleRequests = function(req, res){
    proxyTo = "https://domain1.com:50001"; <= some logic chooses this based on req.headers.host
    proxy.web(req, res, { target: proxyTo });
};

app.get('/*', handleRequests );
app.post('/*', handleRequests );
app.put('/*', handleRequests );
app.delete('/*', handleRequests );

http.listen(443, function(){});

好的,所以这实际上非常有效,一切都应该在浏览器中进行,而在使用jquery ajax的cordova应用程序中,一切都运行良好。 但是,如果我使用

FileTransfer().download(...)

我收到错误代码3(连接错误) 如果我直接连接到https://domain1.com:50001(直接)该应用程序可以正常工作,但如果我连接到https://srv1.domain2.com:443(代理)该应用程序无效。

所有证书都是有效的,* .domain2.com上的通配符证书和domain1.com上的单证书 终端服务器已安装domain1.com证书,并且代理已安装* .domain2.com通配符证书。

有关如何正确设置代理服务器的任何想法?该系统是Windows Server 2012 R2,如果需要,我可以使用真正的代理。然而,尽可能简单的解决方案会很好。

我在这里试过两个例子:
http://blog.nodejitsu.com/http-proxy-intro/
但是这是同样的问题,它只是GET请求。

我还尝试在终端服务器上禁用https,这样它只是安全的代理,但结果相同......

...谢谢

1 个答案:

答案 0 :(得分:0)

好的,所以我发现了这个问题,由于某些原因,req.headers.host字符串也包含:port,而我只是打开了地址。现在一切都有效。