документация по nginx объясняет поведение:
Если директива proxy_pass указана с URI, то при передаче запроса на сервер часть нормализованного URI запроса, соответствующая местоположению, заменяется URI, указанным в директиве:
В вашем случае это означает, что URI запроса заменен на /апи/v1/
URI, указанный в вашем proxy_pass
директива.
Если вы хотите, чтобы URI передавался как есть, вам нужно сделать:
местоположение /api/v1/ {
proxy_pass http://frontend-api.preprod.example.com;
}
В этом случае nginx использует URI из исходного запроса с proxy_pass
пункт назначения, как описано:
Если proxy_pass указан без URI, то URI запроса передается на сервер в том же виде, в каком он был отправлен клиентом при обработке исходного запроса, или полный нормализованный URI запроса передается при обработке измененного URI:
Если вы хотите заменить часть URI запроса другой частью, вам нужно использовать захват регулярного выражения:
расположение ~ ^/источник/путь/(.*) {
proxy_pass http://example.com/destination/path/$1;
}
Редактировать:
Чтобы получить доменное имя исходного запроса, переданного восходящему потоку, необходимо установить Хозяин
Заголовок HTTP для восходящего запроса:
proxy_set_header Хост $host;
Часто бывает полезно также передать IP-адрес посетителя через заголовок:
proxy_set_header X-Forwarded-For $remote_addr;