我正在使用nodejs TCP代理來執行此操作。所有解釋都在代碼中。
var net = require('net');
// your hosts
var dns = {
'localhost' : 8000,
'b.host' : 3000,
'a.host' : 3001
};
// Create TCP-server
var server = net.createServer(function(soc){ // soc is socket generated by net.Server
// Incoming request processing
soc.on('data', function(data){
// Create new socket
var client = net.Socket();
// Get host from HTTP headers
var re = /[^\n]+(\r\n|\r|\n)host:\w*([^:]+)/i;
var host = data.toString('utf-8').match(re);
if (! dns[host])
{
soc.end('HTTP/1.1 404 Host not found');
return;
}
// Connect to Node.js application
client.connect(dns[host]);
// Pause soc for inner socket connection
soc.pause();
client.on('connect', function()
{
// Write request to your node.js application
client.write(data.toString('utf-8'));
});
client.on('data', function(cdata)
{
// Return socket to live
soc.resume();
// Write client data to browser
soc.write(cdata.toString('utf-8'));
soc.pipe(soc);
soc.end();
});
client.on('end', function(){
client.destroy();
});
});
}
);
server.on('error', function (err){
// Error processing i just pass whole object
console.log(err);
});
server.listen(8088);
console.log('Server is listening %d\n', 8088);
爲什麼不把類似的東西在前面nginx的? – jcolebrand
根據我的測試,在2次全程服務中減速。 –
nginx使用異步io進行編程,並且當前是世界上最快的webserver。節點的創建者Ryan Dahl總是將nginx引用爲他在性能方面的目標。無論您將實施哪種反向代理解決方案(並且您將需要一個滿足您的情況的解決方案),由於反向代理,您將失去性能。 –