nginx+redis+eval
Дмитрий Жильцов
zaabjuda на gmail.com
Вс Мар 4 20:41:25 UTC 2012
Здравствуйте.
Возникла у меня заминка при написания конфига.
Что имеем
1. Необходимо выполнять динамическое проксирование с url типа
http://site.com/dln/IDUSER/IDCONTENT на значение ключа
dlnIDUSER_IDCONTENT из redis'а
2.Пример URL http://site.com/dln/VASYA/1234576
redis 127.0.0.1:6379> get dlnVASYA_1234576
"http://192.168.0.12:8080/colorring/rl/097/0/2340/0500/242.mp3"
Сщщответсвенно URL http://site.com/dln/VASYA/1234576 должен
проксироваться на
http://192.168.0.12:8080/colorring/rl/097/0/2340/0500/242.mp3
Был написан конфиг
location ~ ^/dln/(?P<USERID>[^/]+)/(?P<IDCONTENT>[^/]+) {
eval_escalate on;
eval $dlnproxy {
set $dln "dln";
set $dl "_";
set $dlnKey $dln$USERID$dl$IDCONTENT;
set $redis_key "$dlnKey";
redis_pass redis;
}
proxy_pass $dlnproxy;
}
В логах ругается
2012/03/05 00:11:39 [error] 14823#0: *1 the "$redis_key" variable is
not set, client: 172.16.10.57, server: localhost, request: "GET
/dln/testuser/23456 HTTP/1.1", subrequest: "/eval_157611100", host:
"10.238.32.174"
После повторного прочтения документации по eval понял что eval
отрабатывает раньше rewrite.....
Подскажите как выйти из этой ситуации, предпологаю что нужно парсить
переменную $uri внутри функции eval, и выделять оттуда переменные, но
как это можно реализовать??
Подробная информация о списке рассылки nginx-ru