Мы экспериментируем со службой RPC (линкер), который действует как клей между нашими микросервисами - считывает их расположение из локального кластера Consul и т. д. Теперь 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? Или я делаю глупость?
Спасибо!
На самом деле это было то, что я пропустил - linkerd поддерживает HTTP/1.1
прямо из коробки, и nginx использовал 1.0 для перенаправления в службу компоновщика. Добавление
proxy_http_version 1.1
Исправлена проблема для меня.