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

Другие вопросы по тегам