Динамический порт NGINX proxy_pass
Мне нужен способ proxy_pass
динамический порт через URL-адрес местоположения. Прокси-сервер имеет тот же IP-адрес, но порт изменяется, поскольку серверы создаются через докер на случайных номерах портов. (Слишком много для меня, чтобы добавить вручную)
Мне нужен способ proxy_pass
эти URL и порты динамически. Я думал, я мог бы как-то передать номер порта через переменную URL?
Пример:
location /$someport/servername/hls/ {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://216.189.210.65:$someport;
}
Есть ли способ, которым я могу сделать это?
0 ответов
Regex спешит на помощь (~
). Сделайте группу захвата круглыми скобками и используйте первую с
$1
. Используйте вторые круглые скобки с
$2
или лучше
$myuri
. я сохраняю
$2
в
$myuri
и
$args
в
$myargs
для сохранения / кодирования возможных пробелов!
location ~ ^/([0-9]+)(/servername/hls/.*)$ {
set $myuri $2; # set preserves/encodes spaces!!
set $myargs $args; # set preserves/encodes spaces!!
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://216.189.210.65:$1$myuri$is_args$myargs;
}
^
это начало
$request_uri
.
+
соответствует одному или нескольким (числам).
.
это любой персонаж.
*
нет, один или несколько (символов).
$
- конец местоположения (перед строкой запроса).
Поскольку расположение nginx не может соответствовать строке запроса после вопросительного знака, вам необходимо добавить
$is_args$args
или лучше
$is_args$myargs
.
Я помню, как делал что-то в прошлом, и это сразу сработало. Не проверено.
Не уверен, что Nginx извлечет ваши переменные оболочки.
Если он работает на том же сервере, вы все равно можете сделать это, вставив в блок сервера новый номер порта (cat, grep, sed и т. Д.), А затем перезапустив или перезагрузив nginx с новым файлом.
Это определенно можно сделать через bash.