У Игоря более симпатичный вариант
Андрей Бойко пишет:
А если так:
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@xxxxxxxxxxxxx> wrote:
On Fri, Aug 21, 2009 at 02:52:46PM +0400, Андрей Бойко wrote:
Если я правильно все прочитал про x-accel-redirect - каждый раз таки будет
дергаться апач с php.
Да.
Суть в том, что в php все процессы и так оптимизированы до отдачи готового файла с диска или из мемкеша. Задача как раз в том, чтобы апач не дергать вообще (пока кеш есть), но при этом таки проверять авторизованность.
Мне видится такой вариант скорее - в php создавать файл с тем же именем, что значение куки, и nginx-ом проверять его наличие. Тогда при авторизации один раз дергается php/апач, а потом не дергается. Пока только не соображу, как проверять.
Или я где-то не дочитал про x-accel-redirect?
On Fri, 21 Aug 2009 14:03:32 +0400
Igor Sysoev <is@xxxxxxxxxxxxx> 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 нет или неверная) будет
выдаваться одна кэшированная копия, а для авторизованных - другая.
и если авторизовался - ему отдавался запрошенный контент из кеша, а если
нет - его редиректило на страницу авторизации?