#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
.