762 читателя, 22 поста
Администрация
Модераторы
Блог поддержки веб-сервера «engine X» от Игоря Сысоева.
Новости, проблемы, решения, модули итд
Новости, проблемы, решения, модули итд
http {
proxy_cache_path /var/www/cache levels= keys_zone=mycache:150m;
...
}
server {
#устанавливаем дефолтовый флаг, не кэшировать
set $cached 0;
listen server;
server_name server *.server;
#нужно чтобы отдавать красивую 500Ашипку с себя
error_page 502 503 504 509 /500.html;
#если где-то что-то забыли, то будет работать схема прозрачного проксирования
error_page 404 = @nocached;
expires epoch;
root /var/www/html;
location = /500.html {
}
#динамику будем брать с frontend и если отсутствует, то скачивать
location ~* ^.+\.(jpg|jpeg|gif|gz|zip|flv|rar|wmv|avi|css|swf|png|htc|ico|mpeg|mpg|txt|mp3|mov|js)$ {
expires 1y;
error_page 404 = @fetch;
}
#кэшируем статику на себя
location @fetch {
proxy_pass httр://backend;
proxy_store on;
proxy_temp_path /var/www/_fetch;
proxy_set_header Host mydomain;
proxy_set_header If-Modified-Since "";
}
#для зарегистрированных проксируем прозрачно
location @nocached {
proxy_pass httр://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 httр://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 mycache;
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 = / {
return 404;
}
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;
}
}
}
комментарии (27)
Очистку делать по крону, тупо перебирая файлы и сравнивая время создания?
По сравнению с 90% последних топиков этот — мегаполезный.
#динамику будем брать с frontend и если отсутствует, то скачивать
…
expires 1y;
на нужое значение
К примеру, я обновил CSS. Мне надо убить кеш на фронтенде, а клиенту отдать другой URL, по которому он закеширует таблицу стилей на всегда и больше не будет ее запрашивтаь.
Давно в nginx не копался, старость, склероз )
т.е. на вебсервере лежать у вас будут вася.css, а сервера-кэши будут забирать уже новое имя. Собственно это задача уже системы публикации, а не серверов-кэшей. Они работают всё-же тупо на обработке 404.
Однако читать было как-то немного щекотно. «Несколько frontend… отдаются… ». Я так понимаю, вам не хотелось писать слово «фронтенд». Ну хорошо, в английском нет падежей, но есть множественное число.
«ТТХ backend» я понял только потому, что являюсь программистом и лейтенантом РВиА одновременно :-)
И получается, вы боретесь за чистоту русского от английского, но в логах пишете «Ашипка».
Будьте проще :-) Как nginx :-)
if ($request_method = POST) {
set $cached 0;
}
if ($request_method != GET) {
set $cached 0;
}
Может стоит оставить только последний?
location = / {
return 404;
}
отдастся не из кэша, ну это на внимательность.
if ($request_method = POST) { set $cached 0; } if ($request_method != GET) { set $cached 0; }начиная с 0.7.48 Исправление: теперь nginx кэширует только ответы на запросы GET.
так же нет смысла в proxy_hide_header «Set-Cookie»; nginx по умолчанию прячит этот заголовок.
0) он менее прожорлив к ресурсам;
1) иногда на фронтендах можно ченить запускать phpшное если сильно хочется;
2) не хочется городить огород из софта, чем проще конфигурация, тем надёжнее.
В разделе отдачи сохраненной статики, отсутствует директива root (наследуется с предыдущего уровня, но это не поможет), соответственно все запросы уйдут на @fetch по 404
и сама метка с ошибкой. вероятно, имелось в виду "
динамикустатику будем брать с frontend и если отсутствует, то скачивать"так же опечатка в разделе сервер
location = /500.html
{а за труд респект