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

Исправлена ​​проблема для меня.

Другие вопросы по тегам