У меня есть разные сервисы, которые будут обрабатывать разные части URL в зависимости от передаваемых параметров
Сервис offer
будет обрабатывать маршрут /offer/44
и другие маршруты, такие как /offer/44/calculator
, следующий код успешно обрабатываеттот.
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/$1 break;
proxy_pass http://localhost:4000/;
}
}
Но мой дополнительный уровень сложности наступает, когда у меня есть URL /offer/44/payments/*
, который затем должен быть перенаправлен через другой сервис
Я перепробовал множество разных вариантов расположения гнезд, но ничегоКажется, работает на payments
.Попытался сделать что-то вроде следующего (перенаправление является базовым прямо сейчас, поскольку я просто пытался сделать это просто перенаправлением ... но в идеале я хочу, чтобы оно взяло все после payment
и поместило его в URL другой службы)
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/$1 break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ^/offer/([0-9]+)/payment/(.*)$ {
proxy_pass http://payment-docker.local:20000/init;
}
}
Итак, мой вопрос: как заставить локальное вложение работать так, чтобы, если оно видит слово payments
после offer
, оно proxy_pass для другой службы?
ОБНОВЛЕНО:
, чтобы сделать его еще более упрощенным
Некоторые вещи, которые я пробовал
Кажется, что nginx
не нравится, это числа
Это работает
# Example URL = http://localhost/offer/
location ^~ /offer/ {
proxy_pass http://payment-docker.local:20000/init;
}
Это не работает .как только есть регулярное выражение числа, оно всегда возвращает 404
# Example URL = http://localhost/offer/3
location ^~ /offer/([0-9]+) {
proxy_pass http://payment-docker.local:20000/init;
}
# Example URL = http://localhost/offer/33
location ^~ "/offer/[\d]{2}" {
proxy_pass http://payment-docker.local:20000/init;
}