У меня есть веб-приложение, работающее на сервере (скажем, на localhost:8000
) за обратным прокси-сервером на том же сервере (на myserver.example:80
). Из-за того, как работает обратный прокси-сервер, приложение видит входящий запрос, нацеленный на localhost:8000
, и поэтому используемая среда пытается генерировать абсолютные URL-адреса, которые выглядят как localhost:8000/some/ressource
вместо myserver.example/some/ressource
.
* 1007. * Каков будет «правильный способ» создания абсолютного URL (а именно, определение имени хоста для использования) из-за такого прокси-сервера? Конкретный прокси-сервер, инфраструктура и язык не имеют значения, я имею в виду это больше в смысле HTTP.
Из моего первоначального исследования:
- RFC7230 явноговорит , что прокси-серверы ДОЛЖНЫ изменить заголовок
Host
при передаче запроса, чтобы он выглядел так, как если бы запрос поступил от них, поэтому было бы похоже на использование Host
для определения имени хоста для URL, но вВ большинстве мест, где я смотрел, общий совет, похоже, заключается в том, чтобы настроить обратный прокси-сервер таким образом, чтобы он не изменял заголовок Host
(против спецификации) при передаче запроса. - RFC7230 также говорит что «запрос на восстановление URI» должен использовать следующие поля, чтобы найти, какой «компонент полномочий» использовать, хотя, похоже, это применимо только с точки зрения агента, отправившего этот запрос, такого какпрокси:
- Фиксированный компонент полномочий URI от сервера или конфигурации исходящего шлюза
- Компонент полномочий от thЗапросить первую строку, если это полный URI, а не путь
- Заголовок хоста, если он присутствует, а не пустой
- Адрес прослушивания или имя хоста, а также номер входящего порта, если это непо умолчанию для протокола
- HTTP 1.0 вообще не было заголовка
Host
, и этот заголовок был добавлен для целей маршрутизации, а не для разрешения полномочий URL. - Существуют заголовки, которыесделаны специально для того, чтобы позволить прокси отправлять старое значение
Host
после маршрутизации, такое как Via
, Forwarded
и неофициальное X-Forwarded-Host
, которые будут проверять некоторые серверы и фреймворки, но не все, и неясно, какой из них должен даже иметь приоритет, учитывая, что их 3.
РЕДАКТИРОВАТЬ: Я также не знаю, будет ли HTTPSработать в этом отношении иначе, учитывая, что заголовки являются частью зашифрованной полезной нагрузки, и маршрутизация должна выполняться другим способом из-за этого .