Обработка промежуточного программного обеспечения прокси с асинхронными функциями - PullRequest
0 голосов
/ 07 ноября 2019

В настоящее время я пишу веб-приложение, использующее Express, которое будет порождать индивидуальные Docker-контейнеры для каждого сеанса и прокси-трафик к ним. Все работало нормально, когда я тестировал с express-http-proxy-async, но мне нужна поддержка websocket для juiceshop. Это подводит меня к использованию http-proxy-middleware, в котором нет поддержки разрешения асинхронного хоста. Я создал больше промежуточного программного обеспечения, чтобы обойти это, но мой трафик не проходит через прокси, и я не могу понять, почему. Вывод говорит, что прокси создается, но я думаю, что Express не использует его должным образом из-за того, как я его называю.

Маршрут:

app.use(vhost('juiceshop.example.com', async (req, res) => {
    let target = await juiceShop_session_handler(req);
    return wsproxy({target: target, ws:true});
}));

Сессияобработчик:

async function juiceShop_session_handler(req){
    return new Promise((resolve, reject) => {
        if(req.sessionID in instances){
            resolve('http://127.0.0.1:' + instances[req.sessionID]['port']);
        } else {
            instances[req.sessionID] = {};
            instances[req.sessionID]['port'] = PORTS.next()['value'];
            let instance = spawn('docker', ['run', '--rm', '-p', instances[req.sessionID]['port'] + ':3000', 'bkimminich/juice-shop']);
            instance.stdout.on('data', (data) => {
                if (data.includes('Server listening on port')) resolve('http://127.0.0.1:' + instances[req.sessionID]['port']);
            });
            instance.stderr.on('data', (data) => {
                if (data.includes('port is already allocated')) {
                    req.session.error = createError(501, 'Failed to bind to port. Complain to the admin about this.');
                    reject()
                }
            });
            instances[req.sessionID]['instance'] = instance;

        }
    });
}

Вывод:

[+] Listening on 80!
[HPM] Proxy created: /  -> http://127.0.0.1:3000

Я не могу понять, почему трафик не проходит через прокси. Вся помощь приветствуется!

...