=?UTF-8?B?INC60Y3RiNC40YDQvtCy0LDQvdC40LUg0LTQu9GPINCz0L7RgdGC0LXQuQ==?=, реализация

1nsk.ru alfa at 1nsk.ru
Tue Nov 24 15:46:07 MSK 2009


День добрый.

Имеется толстая железка, на которой крутится всё файло и все базы.
Имеется пачка тонких железок, которые 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)




More information about the nginx-ru mailing list