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

Artem Bokhan artist at academ.org
Fri Aug 21 17:27:10 MSD 2009


У Игоря более симпатичный вариант

Андрей Бойко пишет:
> А если так:
> location / {
> 	if (!-f /path/to/cookie/$cookie_NAME) {
>         rewrite  ^(.+)$  auth.html  break;
>
> 	proxy_pass http://backend;
> }
> ??
>
> On Fri, 21 Aug 2009 15:03:32 +0400
> Igor Sysoev <is at rambler-co.ru> wrote:
>
>   
>> 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