Прокси выдает ошибку 502 Bad Gateway при попытке загрузить файл из экспресс-приложения через прокси

Я использую прокси-приложение ISAM (назовем его Proxy-APP) на платформе Express. ISAM использует концепцию обратного прокси-сервера для перенаправления трафика на серверное экспресс-приложение (назовем его Приложение).

Проблема:

У нас есть функция загрузки, написанная в App. Аналогично ниже: -

router.get('/fileDownload', function (req, res, next) {
  res.setHeader('Content-disposition', 'attachment;filename=' + req.query.fileName);
  request(req.query.url).pipe(res);
});

Вышеприведенный код делает запрос на внешний URL-адрес (содержит некоторый фактический файл), а затем передает ответ. Периодически мы получаем 502 Bad Gateway в журналах Proxy-App.

Есть закономерность, когда мы получаем ошибку 502. Если прокси-приложение не получает ответ от приложения в течение 2 минут, оно выдает ошибку 502.

Как мы можем написать приведенный выше код более эффективно, чтобы, когда ответ не приходит от req.query.url, мы могли обработать ошибку.

OR

Что мы можем изменить в Proxy-App, чтобы мы могли увеличить тайм-аут на 2 минуты. Ниже приведен контекст и параметры http-proxy-middleware.

  var context = '/';
  var options = {
    target: TARGET,
    changeOrigin: true,
    logLevel: 'info',
    agent: https.globalAgent,
    timeout: 3600 * 1000
  };

  var proxy = proxyMiddleware(context, options);
  app.use(proxy);

Примечание. Тайм-аут выше никак не влияет на решение проблемы.

Изменить: request модуль из node.js.


person abhishekrvce    schedule 14.09.2017    source источник


Ответы (1)


Прежде всего, не было никаких проблем с ISAM. Они ответили, что ошибка 502 Bad Gateway исходит от поддерживаемого сервера. то есть наше приложение.

Первая проблема была с таймаутом по умолчанию 2 минуты. который жестко запрограммирован в узле см. ссылку. Этот блог поможет мне определить это.

Но после увеличения setTimeout для сервера/запроса/ответа я получал файл дольше. В основном это не тайм-аут. (нет ошибки 502).

Тем не менее, это не решило мою проблему. Хотелось быстро, а не через какое-то время. Поиск в Google дал мне модуль узла под названием hyperquest. который является дизайном для аналогичной проблемы. Он упомянул, что модуль request имеет некоторые ограничения для передачи данных через http.

person abhishekrvce    schedule 10.10.2017