Re: Upstream и заголовок Host
Maxim Dounin
mdounin на mdounin.ru
Вт Янв 22 14:31:37 UTC 2019
Hello!
On Tue, Jan 22, 2019 at 09:54:12AM +0300, CoDDoC via nginx-ru wrote:
> Доброе время суток!
>
> Тестовый сервер: test.local. В нем тестовый кластер:
> upstream cdn {
> server <IP_1>:<port_1>;
> server <IP_2>:<port_2>;
> ....
> }
>
> или:
> upstream cdn {
> server cdn001.test.local:<port_1>;
> server cdn002.test.local:<port_2>;
> ....
> }
>
> Не принципиально, ибо "cdn001.test.local" резолвится в <IP_1> и т.д.
>
> Само собой, "proxy_http_version 1.1;" и из какого-то локейшена "proxy_pass http://cdn;"
> Теперь смотрю, что приходит, например, на выбранный бэкенд.
> Ожидаю там увидеть в заголовке Host значение <IP> или 'cdn###.test.local'.
> Вижу: http header: "Host: cdn". Что не так?
А можно вопрос - почему вы ожидаете увидеть в заголовке Host
"<IP> или 'cdn###.test.local'"?
Документация по данному вопросу однозначна, да и, скажем,
прописывая в DNS соответствующие A или CNAME-записи никто не
ожидает, что в запросах будет заголовок Host, соответствующий
содержимому записи.
Почему от блоков upstream вдруг ожидается какое-то другое
поведение?
На всякий случай уточню - вопрос вполне серьёзный, хочется
понять, на какие аналогии опираются люди, считающие, что заголовок
Host должен зависеть от того, на какой IP-адрес из списка был
отправлен запрос. Вроде бы аналогия с DNS очевидна, и она
подразумевает именно именно то поведение, которое есть сейчас, но
почему-то людей, предполагающих другое поведение, много.
[...]
> Попутно вопрос о $upstream_addr.
> Ее можно еще как-то использовать, кроме как в логах? Например, отправить в php, но без костылей?
Нет. Запрос формируется до выбора бэкенда, на который этот запрос
будет отправлен (а в рамках proxy_next_upstream - один и тот же
запрос может быть отправлен на несколько бэкендов). Соотвественно
переменную $upstream_addr можно использовать в логах (а равно при
обработке ответа бэкенда - скажем, в add_header), но бессмысленно
использовать в запросе на бэкенд - на момент формирования запроса
она всегда будет пустой.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru