NGINX перенаправляет все запросы, соответствующие URL с параметрами на поддомен - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть веб-сайт, который также обслуживает запросы API к приложению в основном домене.Я хотел бы отправить все соответствующие запросы / api на поддомен api.

Например, я бы хотел https://example.com/api + https://example.com/api/some_action + https://example.com/api/some_action?params1=somevalue&params2=value2.... для перенаправления ната же структура URL, но только на поддомене.

Так для приведенного выше примера:

https://example.com/api -> https://api.example.com/api

https://example.com/api/some_action -> https://api.example.com/api/some_action

https://example.com/api/some_action?params1=somevalue&params2=value2.... -> https://api.example.com/api/some_action?params1=somevalue&params2=value2....

Также для всех типов запросов (получить, сообщения и т. Д.).До сих пор я пробовал это в директиве сервера для основного домена (в директиве сервера 443 SSL)

location ~ /api(.*)$ {
  return 301 https://api.example.com/api/$request_uri$is_args$args;
}

Результат, который я получаю при выполнении простого запроса GET на https://api.example.com/api/some_action?param1=value ... https://api.example.com//some_action без параметров и без API.

1 Ответ

0 голосов
/ 09 февраля 2019

Для перенаправления example.com/api/foo?bar на api.example.com/api/foo?bar необходимо использовать:

location ^~ /api {
    return 307 https://api.exemple.com$request_uri;
}

Переменная $request_uri содержит исходный запрос, включая префикс /api/ и строку запроса.

Оператор ^~ дает этот приоритет location (подробности см. в этом документе ).Код состояния 307 поддерживает GET / POST через перенаправление (подробнее см. эту ссылку ).

...