Логика работы такая:
nginx умеет ходить в memcached за страницей
если такой страницы в memcached нет то получается 404 код ошибки который можно
перехватить и перенаправить на backend
Который проставит нужные данные в кеш и отдаст ответ nginx'u.
(производительность связки nginx+memcached куда выше чем можно добится у
nginx+(apache/mod_perl для X-Accel-Redirect)+ memcached)
Такая связка реально работает и показывает очень приличную производительность
(сколько максимум так можно отдавать не знаю... думаю упрется в ethernet).
PS: что не возможно сделать пока это использование распределенного на несколько
серверов memcached изза того nginx пока не умеет считать какой либо хеш от URL
чтобы на его основе принимать решение в каком из memcached сервер искать данные.
(хотя конечно можно по locations разбросать руками на несколько memcached)
Пример рабочего конфига (сильно упрощенный) :
location =/ajax/SOME_URL.html {
#без этого content_type кривой будет
default_type text/html;
#идем в memcached
#ключ в memcached '/ajax/SOME_URL.html'
#если у запроса нужны аргументы надо не забыть их сохранить для случая memcached miss
#через set $ArgsCopy $args;
#и потом добавить их через rewrite в location /_backend_/
memcached_pass SOME_MEMCACHED_IP:SOME_MEMCACHED_PORT;
#если в memcached не попали то через 404 error_page запрашиваем данные у backend
#который нам их отдает и записывает итог в memcached
error_page 404 = /_backend_/ajax/SOME_URL.html;
}
#внутренний URL для обработки случаем memcached miss на этот location
location /_backend_/ {
internal;
#идем на backend
proxy_pass http://BACKEND_IP:BACKEND_PORT/;
}
1153 Прочтений • [Кэширование страниц в memcached и nginx (nginx web memcached cache speed)] [08.05.2012] [Комментариев: 0]