我的系统上运行了许多不同的服务器,它们都在自己的端口上运行安全连接等.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,这样它只是安全的代理,但结果相同......
...谢谢
答案 0 :(得分:0)
好的,所以我发现了这个问题,由于某些原因,req.headers.host字符串也包含:port,而我只是打开了地址。现在一切都有效。