Динамический порт 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.