#node.js #firebase #firebase-hosting #google-cloud-run
#node.js #firebase #firebase-хостинг #google-cloud-run
Вопрос:
Мне нужно выполнить SSR в моем веб-приложении. И поскольку это международный веб-сайт, мне нужно знать домен (имя хоста), который запрашивает веб-сайт, чтобы я мог отображать на соответствующем языке для пользователя.
Пример:
https://www.mydomain.co.uk // WILL RENDER IN ENGLISH
https://www.mydomain.es // WILL RENDER IN SPANISH
Вот настройка
- Экспресс-сервер в облачном докере Node.js контейнер
- Firebase Hosting перепишет все запросы в контейнер облачного запуска
Вот как Firebase перезаписывает трафик:
firebase.json
"rewrites": [
{
"source": "**",
"run": {
"serviceId": "my-server-id",
"region": "us-central1"
}
}
]
Все работает нормально. Но я заметил, что все запросы достигают моего сервера облачного запуска со следующим именем хоста:
req.hostname === "https://my-server-id-on-cloud-run.run.app"
, который является URL-адресом облачного запуска по умолчанию для моей серверной службы.
Я заметил, что Firebase Hosting добавляет мое фактическое доменное имя в следующий заголовок:
x-forwarded-host: "https://www.mydomain.co.uk" OR "https://www.mydomain.es
Это правильный заголовок для чтения моего домена? Я не нашел никакой документации по этому вопросу.
Если пользователь попадает на мой веб-сайт, используя URL-адреса Firebase по умолчанию в моем приложении ( web.app OR firebaseapp.com
) или через подключенный пользовательский домен, я могу рассчитывать на то, что x-forwarded-host
заголовок всегда будет там, правильно?
Может ли быть ситуация, когда x-forwarded-host
будет содержать более одного URL-адреса? Как это происходит x-forwarded-for
с IP-адресами?
Ссылки:
- https://firebase.google.com/docs/hosting/cloud-run
- https://firebase.google.com/docs/hosting/full-config#rewrite-cloud-run-container
PS: Я заметил, что если я попаду на свой сервер облачного запуска непосредственно с URL-адреса Cloud Run по умолчанию .run.app
, x-forwarded-for
заголовок отсутствует, что имеет смысл, учитывая тот факт, что это прямой запрос, а не перезаписанный.
Ответ №1:
Согласно этому документу,
- Этот заголовок может быть лучшим вариантом, учитывая все плюсы, которыми вы делитесь plus:
X-Forwarded-Host
заголовок полезен для определения того, какой хост использовался изначально.- Этот заголовок используется для отладки, статистики и генерации содержимого, зависящего от местоположения.
- Синтаксис:
X-Forwarded-Host: <host>
, а директива:
<host>
The domain name of the forwarded server.
Это означает, что в этом заголовке не может быть меньше 1 значения.