Мне нужен способ 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.