Рейтинг:0

Несколько путей в Nginx

флаг cn

Я впервые пробую nginx и запускаю его локально. Мне удалось запустить свои службы, но у меня есть загадочный вопрос, потому что я запускаю микрослужбу, и во время обновления я хочу иметь возможность просто заблокировать определенную службу.

Теперь у каждой службы есть путь, например

\апи\v1\кошелек \api\v1\карта

у меня проблема в том, что путь к кошельку и карте находится в одной и той же службе.

Если у меня разные пути, мне придется дублировать или есть способ заставить его работать лучше?

Вот мой конфиг файл

рабочие_процессы 4;

события { worker_connections 1024; }
http {

    сервер {

        слушать 80;
        кодировка utf-8;

        расположение ~ ^/api/v1/пользователь {
            переписать ^/api/v1/user/(.*) /$1 break;
            proxy_pass http://пользователь-сервис:3001;
            прокси_http_версия 1.1;
            proxy_set_header Обновить $http_upgrade;
            proxy_set_header Соединение «Обновление»;
            proxy_set_header Хост $host;
            proxy_cache_bypass $http_upgrade;
        }

        расположение /api/v1/кошелек/ {
            # перезаписать /api/v1/wallet/(.*) /$1 break;
            proxy_pass http://wallet-service:3007/api/v1/wallet/;
            прокси_http_версия 1.1;
            proxy_set_header Обновить $http_upgrade;
            proxy_set_header Соединение «Обновление»;
            proxy_set_header Хост $host;
            proxy_cache_bypass $http_upgrade;
        }

        расположение /api/v1/карта/ {
            # перезаписать /api/v1/wallet/(.*) /$1 break;
            proxy_pass http://wallet-service:3007/api/v1/card/;
            прокси_http_версия 1.1;
            proxy_set_header Обновить $http_upgrade;
            proxy_set_header Соединение «Обновление»;
            proxy_set_header Хост $host;
            proxy_cache_bypass $http_upgrade;
        }

    }


}
флаг in
В чем вопрос? Если вышестоящий сервер недоступен, nginx возвращает ошибку прокси, независимо от того, в каком месте это происходит...
King avatar
флаг cn
Я спрашиваю, можно ли принять какой-то подстановочный знак, чтобы я не дублировал местоположение просто разными путями.
Рейтинг:0
флаг us

Вы можете использовать следующую настройку:

местоположение /api/v1/пользователь {
    ...
}

расположение ~ ^/api/v1/(кошелек|карта)/$ {
    proxy_pass http://wallet-service:3007/api/v1/$1/;
    ...
}

Здесь мы используем захват регулярного выражения, чтобы получить компонент пути в $1 переменная, а затем использовать ее в proxy_pass пункт назначения.

Если вы хотите передать остальную часть URL-адреса через proxy_pass, то вам нужен второй захват:

расположение ~ ^/api/v1/(кошелек|карта)/(.*)$ {
    proxy_pass http://wallet-service:3007/api/v1/$1/$2;
    ...
}
King avatar
флаг cn
второе предложение возвращает `nginx-proxy_1 | 06.03.2022 13:11:48 [ошибка] 32#32: *4 не определен преобразователь для разрешения службы кошелька, клиент: 172.20.0.1, сервер: , запрос: "GET /api/v1/card/health HTTP /1.1", хост: "localhost" nginx-прокси_1 | 172.20.0.1 - - [06/Mar/2022:13:11:48 +0000] "GET /api/v1/card/health HTTP/1.1" 502 157 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, как Gecko) Версия/15.1 Safari/605.1.15"`
King avatar
флаг cn
Первый тоже возвращает мне ошибку 502.
флаг us
Вам необходимо определить преобразователи имен с помощью директивы `resolver` в nginx, если вы хотите использовать имена для своих серверных служб. Альтернативой является использование IP-адресов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.