ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ssi, блочное к ешировани? ? и авториз ация...



(Apache+php) ==> nginx
Вопрос вот какой: есть страничка, должна выдаваться _только_ авторизованным 
пользователям, на ней имеются блоки:
1) информация о пользователе (ключ кеша proxy_cache_key 
"$scheme|$proxy_host|$uri|$is_args|$args|$cookie_sid")
2) общий блок (ключ без куки proxy_cache_key 
"$scheme|$proxy_host|$uri|$is_args|$args";)

Вопрос собственно вот в чем:
можно-ли, при приходе запроса от пользователя, проверять валидность куки (через 
апач+пхп) и в ключ добавить поле "авторизован пользователь?". Это позволило бы 
выдавать блок (2) всем авторизованнм пользователям один и тот же и при этом не 
выдавать его тем кто не авторизован. То же касается и блока (1), защита от 
подсовывания куки ручками, даже если ее сбросили при logout-е, но у 
пользователь сохранил ее отдельно и теперь пытается подсунуть.

Сейчас получается что для выдачи _любой_ страницы из кеша достаточно правильно 
составить запрос чтобы подошел составной ключ кеша и страничка отдастся. Даже 
если кука предъявляемая пользователем давно протухла, но соответствующий ключ 
кеша еще жив.

Конфиг сейчас приблизительно такой:

proxy_cache_path /var/lib/nginx/proxy_my levels= keys_zone=my_cache:64m 
max_size=1024m inactive=1d;

server {
        listen          192.168.0.1:80;
        server_name     *.test;

        proxy_set_header        Host            $host;
        proxy_set_header        X-Forwarded-For $remote_addr;

        access_log  /var/log/nginx/logs.test/access_log main;
        error_log   /var/log/nginx/logs.test/error_log debug;

        ssi on;
        ssi_silent_errors off;

        location / {
          proxy_intercept_errors  on;
          proxy_pass              http://192.168.0.1:81/;

          proxy_cache my_cache;
          proxy_cache_valid 200 301 302 304 3h;
          proxy_cache_valid any 0;
          proxy_cache_use_stale updating error timeout invalid_header http_500 
http_502 http_503 http_504 http_404;
          proxy_ignore_headers "Cache-Control" "Expires";
          proxy_cache_key "$scheme|$proxy_host|$uri|$is_args|$args";

          expires -1;
          add_header Last-Modified $sent_http_Expires;
        }

        location /get_user_info/ {
          rewrite  ^/get_user_info/(.*)$  /$1  break;
          
          proxy_pass http://192.168.0.1:81/;
          proxy_pass_header Cookie;

          proxy_cache my_cache;
          proxy_cache_valid 200 301 302 304 3h;
          proxy_cache_valid any 0;
          proxy_cache_use_stale updating error timeout invalid_header http_500 
http_502 http_503 http_504 http_404;
          
          proxy_hide_header "Set-Cookie";
          # Кешируем страницу в любом случае, забив на заголовки
          proxy_ignore_headers "Cache-Control" "Expires";
          proxy_cache_key "$scheme|$proxy_host|$uri|$is_args|$args|$cookie_sid";

          expires -1;
          add_header Last-Modified $sent_http_Expires;
        }
}

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,17302,17302#msg-17302




 




Copyright © Lexa Software, 1996-2009.