Nginx proxy_set_header Хост для управления RPC
Мы экспериментируем со службой RPC ( linkerd), которая действует как связующее звено между нашими микросервисами - считывая их местоположения из локального кластера Консул и т. Д. Теперь Linkerd ожидает увидеть Host
заголовок входящего запроса, чтобы выяснить, к какому сервису обратиться.
В нашей топологии у нас есть nginx, работающий как край, который затем должен прокси-сервер Linkerd и установить заголовок Host в зависимости от пути.
Итак, простая конфигурация, которую мы тестируем, выглядит следующим образом;
location /api/v1/services/service-x {
proxy_set_header Host service-x;
proxy_pass http://linkerd:4140;
}
Что ничего особенного. Это соответствует путям, которые являются путями service-x
, затем пытается proxy_pass те запросы к linkerd с именем службы, установленной в заголовке, который Linkerd должен получить.
Мы видим, что заголовок Host никогда не устанавливается. Услуга доступна через Linkerd, если я curl -H "Host: service-x" linkerd:4140/some/x/path
,
Как мы должны установить заголовки для апстримов с помощью nginx? Или я делаю что-то глупое?
Спасибо!
1 ответ
Это было на самом деле то, что я пропустил - Linkerd поддерживает HTTP/1.1
из коробки, и nginx использовал 1.0 для пересылки в сервис linkerd. Добавление
proxy_http_version 1.1
Исправлена проблема для меня.