Почему AWS EC2 с Custom Next Server не возвращает запросы? - PullRequest
0 голосов
/ 05 августа 2020

Проблема:

У меня есть веб-сервер, который безупречно работает при использовании Next на моем личном сервере. Недавно я перешел на Amazon EC2 и скопировал код и зависимости. После настройки EC2 и запуска сервера я быстро понял, что все вызовы приводят к ответу Timeout. Я уверен, что открыл правильные порты и в конечном итоге открыл все порты для отладки этой проблемы. Я исследую и отлаживаю эту проблему уже более 6 часов и буду признателен за любую помощь.

Тесты:

Когда я впервые понял, что мой сервер не отвечает Правильно, я попытался использовать простой сервер express на EC2 - он работал отлично, как и ожидалось. Мой второй отладочный тест заключался в том, чтобы убедиться, что проблема не связана с портом 443, поскольку я использовал HTTPS. Я создал еще один сервер express, на этот раз с HTTPS. Этот тест также работал, как ожидалось.

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

Скомпилировано успешно.

Код:

Это самый простой для воспроизведения фрагмент кода для этого, просто настройте свой следующий. js и создайте собственный сервер ala :

pages / index.tsx

export default () => {
  return <div>hi.</div>
}

server.ts

import express from 'express';
import next from 'next';

const dev = !(process.env.NODE_ENV || '').includes('production');
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(async () => {
  const serv = express();

  serv.get('/this_works/', (req, res) => res.send('why?'));
  // This does work on EC2.

  serv.get('*', (req, res) => handle(req, res));
  // This does not work.
  // Using "return handle(req, res)" also does not work.
  // Using app.render also does not work.

  serv.listen(80, () => { console.log("up. please for the love of god.") });
});

Это отлично работает на моей машине, но не на EC2. На dev мы получаем то же сообщение, когда кто-нибудь заходит на сайт - он успешно компилируется. В целом проблема заключается в следующем: хотя данные отправляются обратно клиенту при отправке ответа express, данные не отправляются обратно клиенту при вызове следующего дескриптора или запроса рендеринга.

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

Изменить: Я заметил интересную вещь: внутренние страницы, такие как 404, _document и _app, все еще загружаются.

...