Вы сравниваете свои $request_uri
, что равно /app/index.html?target=мастер
из вашего примера, чтобы цель = мастер
и цель=раб
струны. Ни один не совпал, так что $redirect_to
переменная становится пустой строкой. Если вы хотите проверить, $request_uri
содержит цель = мастер
или же цель=раб
подстроки, вы можете использовать шаблоны регулярных выражений внутри карта
блокировать:
карта $request_uri $redirect_to {
главные серверы "~target=master";
подчиненные серверы "~target=slave";
}
или лучше проверить $arg_target
переменное значение:
карта $arg_target $redirect_to {
главные главные серверы;
подчиненные подчиненные серверы;
}
Также рассмотрите возможность использования некоторых По умолчанию
значение, когда нет цель
Аргумент запроса указан в запросе (или его значение неверно):
карта $arg_target $redirect_to {
главные главные серверы;
подчиненные подчиненные серверы;
мастер-серверы по умолчанию;
}
Последнее можно упростить до
карта $arg_target $redirect_to {
подчиненные подчиненные серверы;
мастер-серверы по умолчанию;
}
Или сделайте предварительную проверку, например
карта $arg_target $redirect_to {
главные главные серверы;
подчиненные подчиненные серверы;
}
сервер {
слушать 80;
имя_сервера 192.168.1.10;
если ($redirect_to = '') {
вернуть 501; # HTTP 501 не реализован
}
место расположения / {
proxy_pass http://$redirect_to;
}
}
Обновлять
Если я правильно понимаю ваш дополнительный вопрос - как загрузить все активы из того же восходящего потока, что и основной HTML-файл, - вы можете попытаться получить имя восходящего потока из HTTP Реферер
значение заголовка, если цель
Аргумент запроса отсутствует с использованием двух цепочек карта
блоки (здесь действительно нужны регулярные выражения):
карта $arg_target $redirect_to {
главные главные серверы;
подчиненные подчиненные серверы;
по умолчанию $by_referer;
}
карта $http_referer $by_referer {
главные серверы "~target=master";
подчиненные серверы "~target=slave";
}
сервер {
...
}