Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
кэширование для гостей, реализация
День добрый.
Имеется толстая железка, на которой крутится всё файло и все базы.
Имеется пачка тонких железок, которые round robin отдаются людям.
Изначально эти железки проксировали только статику на себя, а динамику
забирали с backend
Допиливаю схему кэширования динамики для гостей на самих frontend.
Вроде как пашет, но когда запрашивается servername.ru то nginx на
frontend выдает 403, за отсутствием индексного файла, 404 почему-то не
хочет схватывать, всё остальное обрабатывается нормально, несуществующие
директории и т.п. корректно с backend чекаются и проксируются при
необходимости.
Где бага (ну кроме генофонда) ?
proxy_cache_path /var/www/cache levels= keys_zone=wholepage:150m;
...
server {
set $cached 0;
listen servername.ru;
#отдаём домены в том числе юзверьские xyz.servername.ru
server_name servername.ru *.servername.ru;
error_page 502 503 504 509 /500.html;
error_page 404 = @nocached;
expires epoch;
root /var/www/html;
location = /500.html {
}
location ~*
^.+\.(jpg|jpeg|gif|gz|zip|flv|rar|wmv|avi|css|swf|png|htc|ico|mpeg|mpg|txt|mp3|mov|js)$
{
error_page 404 = @fetch;
}
#засасываем статику
location @fetch {
proxy_pass http://backend;
proxy_store on;
proxy_temp_path /var/www/_fetch;
proxy_set_header Host servername.ru;
proxy_set_header If-Modified-Since "";
root /var/www/html;
}
#зарегистрированным не кэшируем
location @nocached {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#привет гостям
location @cached {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache wholepage;
proxy_cache_valid 200 301 302 304 5m;
proxy_cache_key
"$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
proxy_hide_header "Set-Cookie";
proxy_ignore_headers "Cache-Control" "Expires";
}
location / {
if ($http_cookie !~ "userid" ) {
set $cached 1;
}
if ($request_method = POST) {
set $cached 0;
}
if ($request_method != GET) {
set $cached 0;
}
if ($cached = 1) {
error_page 404 405 502 504 = @cached;
break;
}
if ($cached = 0) {
error_page 404 405 502 504 = @nocached;
break;
}
return 404;
error_page 404 405 502 504 = @nocached;
break;
}
}
--
Денис (ALFA-RIPE)
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|