Подстановка аргументов в запрос nginx
Есть location /test1. В нём делается запрос, и создаются аргументы вида &arg_type=new&arg2=200 и т.д.
Для использования в любом location я загоняю эти аргументы в куки.
add_header Set-Cookie "myargs=&arg_type=new&arg2=200;Max-Age=60";
И возникли проблемы с использованием в другом location.
Т.е. есть location:
location /new {
proxy_pass http://example.com/new/;
}
Если подставить мои аргументы в этот location вида http://example.com/new/&arg_type=new&arg2=200, то должно заредиректить на страницу создания карточки, где аргументы раскидаются по полям.
И возникли трудности с реализацией.
Если просто в конце proxy_pass добавить,то в течении 60 секунд будет редиректить только на эту страницу.
Если делать rewrite вида:
rewrite ^(.*) http://$server_name/$1/$cookie_myargs, то идёт постоянный редирект на эту страницу,пока кука жива. Пробовал использовать permanent/last/break, но безрезультатно. Либо постоянный редирект, либо аргументы подставляются несколько раз.
Так же пробовал конструкцию вида (проверка наличия тестовой куки,которая создаётся вместе с аргументами). Итог одинаковый. Получается бесконечный цикл,который живёт 60 секунд.
if ($cookie_myargscheck ~* (true)){
rewrite ^(.*) http://$server_name/$1/$cookie_myargs break/last/permanent;
}
Подскажите,пожалуйста,как это правильно реализовать.
Вариант с кукой нужен, т.к. при прохождение авторизации через сервер SSO идёт 2 редиректа. Первый - запрос на авторизацию,а второй после успешной авторизации. При каждом редиректе идёт декодирование ссылки, а т.к. аргументы уже декодированы,то при этом самом декодировании они отбрасываются. Соответственно до точки назначения доходит только http://example.com/new/
Ответы (1 шт):
Решение оказалось достаточно простым. После проверки cookie на true внутри цикла сразу меняю её на false,и редирект проходит только один раз,и логика приложения не нарушается
if ($cookie_myargscheck ~* (true)){
add_header Set-Cookie "myargscheck=false;Path=/;Max-Age=60";
rewrite ^(.*) http://$server_name/new/$cookie_myargs permanent;
}