кеширование и авторизация

Igor Sysoev is at rambler-co.ru
Fri Aug 21 15:03:32 MSD 2009


On Fri, Aug 21, 2009 at 02:52:46PM +0400, Андрей Бойко wrote:

> Если я правильно все прочитал про x-accel-redirect - каждый раз таки будет дергаться апач с php.

Да.

> Суть в том, что в php все процессы и так оптимизированы до отдачи готового файла с диска или из мемкеша. Задача как раз в том, чтобы апач не дергать вообще (пока кеш есть), но при этом таки проверять авторизованность. 
> Мне видится такой вариант скорее - в php создавать файл с тем же именем, что значение куки, и nginx-ом проверять его наличие. Тогда при авторизации один раз дергается php/апач, а потом не дергается. Пока только не соображу, как проверять.

   location / {

       root  /path/to/cookie_files;
       $cookie_NAME  @auth;

       proxy_pass    http://backend;  # без слэша!!
       proxy_cache   ...
   }

   location @auth {
       proxy_pass    http://backend;
   }


> Или я где-то не дочитал про x-accel-redirect?
> 
> On Fri, 21 Aug 2009 14:03:32 +0400
> Igor Sysoev <is at rambler-co.ru> wrote:
> 
> > On Fri, Aug 21, 2009 at 04:57:13PM +0700, Artem Bokhan wrote:
> > 
> > > Андрей Бойко пишет:
> > > >Добрый день.
> > > >
> > > >У меня возникла такая задача - есть некий сайт (или раздел сайта, не 
> > > >важно), требующий авторизации для просмотра. Нагрузка на него достаточно 
> > > >высокая, в связи с чем возникло желание его закешировать средствами nginx. 
> > > >При этом, информация на сайте не персонифицирована (то есть все 
> > > >авторизовавшиеся видят одно и то же). Можно ли как-то сделать, чтобы nginx 
> > > >проверял, авторизовался ли пользователь (установлена кука, и она валидна),
> > > Наверное, проверять куку лучше тому, кто ее выдал, а не nginx'у. Это 
> > > можно сделать с помощью x-accell-redirect.
> > 
> > Можно так.
> > 
> >    location / {
> >        proxy_pass       http://backend;
> >        proxy_cache      usual;
> >        proxy_cache_key  "$host$request_uri $cookie_NAME";
> >        ...
> >    }
> > 
> >    location /p/ {
> >        internal;
> >        proxy_pass   http://backend/;
> >        proxy_cache  protected;
> >        ...
> >    }
> > 
> > Для авторизованных пользователей выдавать:
> > X-Accel-Expires: 0
> > X-Accel-Redirect: /p/...
> > 
> > Тогда для обычных пользователей ($cookie_NAME нет или неверная) будет
> > выдаваться одна кэшированная копия, а для авторизованных - другая.
> > 
> > > > и если авторизовался - ему отдавался запрошенный контент из кеша, а если 
> > > > нет - его редиректило на страницу авторизации?
> > 
> > 
> > -- 
> > Игорь Сысоев
> > http://sysoev.ru
> > 
> > 
> 
> 
> -- 
> Андрей Бойко <kaa at berloga.ru>

-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list