базовый фильтр auth / ip только для пути, который содержит специальный символ в Ingress NGINX - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу, чтобы мой Ingress (NGINX) фильтровал по IP-адресу источника и показывал базовую аутентификацию перед проксированием к сервису.Хотя это довольно просто, сложная часть состоит в том, что я хочу, чтобы он делал это только, если URL содержит специальный символ в пути.

Позволяет сказать, что я хочу защитить все пути, начинающиеся с "+«перед тем, как передать их правильному сервису.С другой стороны, я все еще хочу, чтобы пути, которые не начинались с «+», направлялись (без базовой аутентификации) к одной и той же службе.Также не следует изменять URL-адрес, который увидит служба.

Примеры могут быть:

/serviceA/what/ever -> http://192.168.0.2/what/ever
/serviceA/what/+ever -> BASIC_AUTH -> http://192.168.0.2/what/+ever
/serviceB/what/ever -> http://192.168.0.3/what/ever
/serviceB/+what/ever -> BASIC_AUTH -> http://192.168.0.3/+what/ever

Возможно ли добиться этого либо в Ingress, либо, по крайней мере, в конфигурации NGINX?Регулярное выражение для пути URL также довольно просто в NGINX, но возможно ли это без дублирования всех записей пути, а также без добавления второго прокси-сервера nginx впереди?

Идеальное решение было бы в конфигурации Ingress yml, но яЯ более знаком с NGINX, поэтому вот пример того, чего я хочу достичь в NGINX-синтаксисе:

Location ~ /+ {
    auth_basic ...;
    auth_basic_user_file ...;
    < route it somehow to the similar location as it would have no +, but don't cut out the + >
}
Location /serviceA {
    proxy_pass ...;
}
... more Locations ...

Или в Ingress что-то похожее с путями-записями.

1 Ответ

0 голосов
/ 06 марта 2019

Прежде всего, ваш:

location ~ /+ {
    auth_basic ...;
    auth_basic_user_file ...;
    < route it somehow to the similar location as it would have no +, but don't cut out the + >
}

будет соответствовать только servicex / + что-то, а не servicex / что-то / + nice

Регулярное выражение, которое вы ищете, выглядит примерно так:

location ~ ^/(.*)\+(.*) for the "+" to be anywhere

location ~ ^(.*)\/\+(.*) for the "+" to be only after a "/"

Для части:

< route it somehow to the similar location as it would have no +, but don't cut out the + >

Вот так вы отправите uri точно так же, как оно пришло:

proxy_pass http://192.168.0.2$request_uri; 

И вот так вы бы взялииз "+"

proxy_pass http://192.168.0.2$1/$2; 

Где $ 1 - это (. *) до / +, а $ 2 - это все после, и мы добавляем недостающий / в середине.

Я думаюэто поможет вам в том, что, я думаю, вы хотите сделать.

Если у вас есть какие-либо вопросы, задайте их, я чувствую, что потерял часть вашего объяснения, и мой ответ не является на 100% точным.

Надеюсь, что помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...