Назад | Перейти на главную страницу

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;
}

Как я могу это сделать?

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.