Почему при отправке запросов используются разные заголовки хостов в Next.js ?

#amazon-web-services #docker #http-headers #next.js #http-host

#amazon-web-services #docker #http-заголовки #next.js #http-host

Вопрос:

Я размещаю свой Next.js приложение на веб-сервисах Amazon в Elastic Beanstalk внутри контейнера docker. Недавно я заметил, печатая req.host из Express.js что всякий раз, когда запрос отправляется на /_next* маршрут, хост myid.elasticebeanstalk.com . Во всех других запросах (например, для фактической страницы или запроса к серверу API) хост является example.com как на стороне клиента, так и на стороне сервера (предположим, что мое приложение размещено по этому адресу).).

Мне интересно, почему это так? Как я могу настроить заголовок хоста даже для того, чтобы /_next* маршруты были example.com ? Я подозреваю, что иногда это может привести к ошибке SSL, потому что хост не будет корректным.

Конфигурация elastic beanstalk является единственным экземпляром. Записи DNS настраиваются в AWS Route 53. Заголовок хоста с myid.elasticebeanstalk.com появляется только в запросах на стороне сервера. example.com это CNAME, не псевдоним. Журналы создаются внутри контейнера docker. В целом, я думаю, SSL-сертификат предоставляется AWS в Cloudfront.

РЕДАКТИРОВАТЬ: похоже, что имя хоста должно быть задано в операционной системе хоста в Elastic Beanstalk, которая должна быть Linux. Этот документ AWS объясняет это.

Комментарии:

1. Не могли бы вы предоставить дополнительную информацию о вашей конфигурации Elastic Beanstalk? Это один экземпляр или среда с балансировкой нагрузки? Где вы настроили запись DNS для example.com чтобы указать на myid.elasticbeanstalk.com ? Не могли бы вы предоставить более общую информацию для лучшего обзора вашего сценария?

2. Я добавил ответы на ваши вопросы в OP.

3. example.com указывает ли запись CNAME или псевдоним на myid.elasticbeanstalk.com ? «отображается только в запросах на стороне сервера» означает, что вы регистрируете заголовок хоста в контейнере docker? Поскольку вы пишете о SSL… Где вы прерываете SSL-соединение? Используете ли вы в настоящее время SSL или планируете его использовать и обеспокоены тем, что регистрируются неправильные заголовки хостов?

4. Я добавил ответы на ваши вопросы в OP. Что касается SSL, в настоящее время проблем нет, но я просто хочу понять, почему у некоторых запросов разные хосты.

5. Спасибо! В основном я пытаюсь понять, сколько служб / серверов находится между вашим клиентом и серверной частью nextjs, чтобы выяснить, какой компонент задает заголовок хоста, который вы регистрируете.

Ответ №1:

Для установки пользовательских HTTP-заголовков вы можете использовать ключ headers в next.config.js:

 module.exports = {
  async headers() {
    return [
      {
        source: '/about',
        headers: [
          {
            key: 'x-custom-header',
            value: 'my custom header value',
          },
          {
            key: 'x-another-custom-header',
            value: 'my other custom header value',
          },
        ],
      },
    ]
  },
}
  

headers это асинхронная функция, которая ожидает, что будет возвращен массив, содержащий объекты со свойствами source и headers :

source это шаблон пути входящего запроса.

headers представляет собой массив объектов заголовка со свойствами key и value .