プロキシを 1 つの localhost ポートにリバースしようとしているノード プロセスがいくつかあります。Node-http-proxy は、最も単純なソリューションのように思えました。Express を実行している 2 つの node.js プロセス (以下の例ではポート 3100 & 3000) と、restify を使用して node.js を実行しているプロセス (2700) にプロキシしています。
var http = require('http'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
var server = require('http').createServer(function(req, res) {
if (req.url.match(/^(\/api\/search|\/api\/suggest)/g)) {
proxy.web(req, res, { target: 'http://127.0.0.1:2700' });
} else if (req.url.match(/^\/pages\//g)){
proxy.web(req, res, { target: 'http://127.0.0.1:3100' });
} else {
proxy.web(req, res, { target: 'http://127.0.0.1:3000' });
}
});
server.listen(9999);
そのため、テスト中に、9999 のサーバーが約 100 サーブ後にファイルの提供を停止し、node-http-proxy プロセスがスローしていることに気付き始めました。
{ [Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect' }
EMFILE は通常、開いているファイルの制限 OS によって引き起こされることを知っています。上限を上げることはできますが、それは役に立たないと思います。100 ミリ秒ごとにループ接続を実行して、3000、3100、および 2700 でサーバーへのアクセスを実行しようとしましたが、問題なく何千ものサーバーで問題なく動作しました。また、これを nginx リバース プロキシの背後で実行しましたが、何千ものサーバーで正常に動作しています。私は node-http-proxy で何か間違ったことをしているように感じます-何かを閉じていないようです。何か案は?