Зарезервировать прокси в разных местах на основе URL-пути - PullRequest
0 голосов
/ 30 января 2019

У меня есть разные сервисы, которые будут обрабатывать разные части 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;
             }

1 Ответ

0 голосов
/ 30 января 2019

Можете ли вы попробовать это?Насколько я помню, nginX использует самое длинное совпадение для местоположений с регулярным выражением.

location /offer {
            rewrite ^/offer/(.*)$ /offer/$1 break;
            proxy_pass http://localhost:4000/;
        }

#my ideal /offer/44/payments/*
location ~ ^/offer/([0-9]+)/payment/(.*)$ {
            rewrite ^/offer/([0-9]+)/payment/(.*)$ /init/payment/$2 break;
            proxy_pass http://payment-docker.local:20000;
        } 
...