Как получить тело ответа в переменной?
Виталий Беленький
heman777 на yandex.ru
Чт Фев 24 10:33:35 MSK 2011
=== Контекст ===
Есть сервис А который содержит некий контент на которй хотят ссылаться многие сайты. Есть много сервисов X которые являются нашими проектами.
Задача: если пользователь ссылается на ресурс А с множесва ресурсов X, то ему показывается просто контент, в противном случае контент с рекламой.
Ресурсы X наши и не представляет большой трудности их модификация.
Хочу сделать следующее ресурс X пишет $remote_addr пользователя в memcached с expire 20 минут. Ресурс A смотрит есть ли $remote_addr пользователя в базе memcached, и если есть то показывает ресурс без рекламы.
Реализация: Вообще это дело можно и на уровне приложения делать, но вот хочется на уровне nginx. Итак: при помощи модуля memc читаем memcached, далее делаем proxy_pass(или rewrite) с параметром или без в зависимости от результата.
Конфигурация
location /checkip {
default_type text/plain;
if ($arg_ip = "") {
echo "please give me ip as parameter";
break;
}
set $memc_cmd 'get';
set $memc_key $arg_ip;
memc_pass 192.168.197.4:11211;
}
location /checkme {
default_type text/html;
# proxy_pass http://192.168.197.4:8888/checkip/?ip=192.168.197.1;
echo_subrequest_async GET /checkip/ -q 'ip=$remote_addr';
#echo "=====";
#echo $http_content;
#echo "=====";
#break;
if ($remote_addr = $http_content) {
proxy_pass http://192.168.197.4:8888/checkme/?show_adv=1;
echo "You are blocked";
break;
}
proxy_pass http://192.168.197.4:8888/checkme/;
}
А теперь собственно вопрос: memc возвращает значение ключа(/check_ip) в теле ответа. Как получить доступ к телу ответа?
--
С уважением, Виталий Беленький
tel. : 8-909-955-67-20
email: heman777 на yandex.ru
Подробная информация о списке рассылки nginx-ru