Welcome! Log In Create A New Profile

Advanced

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

October 27, 2009 10:33AM
(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;
}
}
Subject Author Posted

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

Yury October 27, 2009 10:33AM

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

Yury October 28, 2009 08:31AM

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

Yury October 28, 2009 11:52AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 282
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready