Настройване на статично кеширане с nginx на Debian - Помощ за Debian
Недостатъкът на схемата е, че при добавяне на изображения към публикации трябваше ръчно да коригирате пътя от автоматично генерираното до точния път до файла.
Когато описаната по-горе ситуация най-накрая се умори, беше решено да се промени използвания метод за издаване на статика към кеширане. Всъщност nginx продължава да издава статично, но вече прозрачно. Тоест, при достъп до файл от списъка с използвани разширения, той влиза в кеша на nginx и при повторна заявка се издава директно от кеша без достъп до бекенда. Нека се опитаме да опишем как да настроим кеширането в nginx, като вземем предвид определената задача.
Използвана ОС Debian 7.0, nginx 1.2.1. Първо трябва да се актуализира Debian.
Най-общо казано, всички директиви са изброени на официалния уебсайт на nginx, но са малко трудни за разбиране.
Тъй като в основната конфигурация/etc/nginx/nginx.conf имаме редаinclude /etc/nginx/conf.d/*.conf, създаваме отделен файл/etc/nginx/conf.d/cache.conf с основни настройки на кеша:
Нека анализираме елемент по елемент на първия ред, започващ сproxy_cache_path. Може да има няколко такива реда, следователно може да има няколко кеша със собствени параметри и имена. Така:
/var/cache/nginx - път към директорията на кеша.
levels=1:2 - нива на кеш директория. Нивата на влагане се задават чрез двоеточие, числата задават дължината на името на директорията. 1:2 казва, че в директорията на кеша ще бъдат създадени директории с дължина една шестнадесетична цифра (от 0 до f), във всяка от които ще бъдат създадени директории с имена, състоящи се от две шестнадесетични цифри.
keys_zone=static_cache:100m - задава името на кеша (static_cache ) и неговия основен размер вмегабайта.
inactive=120m - времето на липса на заявки към кеш елемента, след което той се премахва от кеша. След минути. След това, когато поискате същия файл, ще бъде направена заявка към бекенда и файлът ще бъде отново кеширан.
max_size=500M - максимален размер на кеша в мегабайти.
Вторият ред, както беше установено експериментално, също е необходим, за да работи кеша на nginx:
proxy_cache_min_uses 1; - показва след колко заявки към файла ще попадне в кеша.
Не забравяйте да създадете директория за кеша и да зададете неговия собственик като nginx в Debian:
След това във файла с описание на сайта в директорията /etc/nginx/sites-available напишете нещо подобно:
В този случай ние също пренасочваме заявките към бекенда, но в същото време ги кешираме за един ден. Интересуваме се от следните параметри:
proxy_cache static_cache; - указва кой кеш да се използва.
proxy_cache_valid 1d; - позволява ви да зададете времето на кеша за различни кодове за отговор. По подразбиране се кешират само 200, 301 и 302 отговора.
proxy_cache_key "$request_method$http_if_modified_since$http_if_none_match$host$request_uri"; - този ред е най-интересен. Тя ви позволява да конфигурирате на какво основание да считате, че заявките трябва да се кешират отделно. Например стойността в кеш файла на nginx може да изглежда така:
Вижда се, че в случая
$request_method = GET $host = droid.gesu.su $request_uri = /wp-content/plugins/addthis/css/output.css?ver=3.5.1
Тоест, когато се използва различен метод на заявка, файлът трябва да се кешира отделно. Същото за едно и също име за различни имена на домейни или различни имена на файлове за един и същ домейн.
$http_if_modified_since и$http_if_none_match - позволява да не се издават страници с отговор “304 Not Modified” или празни страници. В нашия случай това най-вероятно не е от значение, тъй като предоставяме статично съдържание, което рядко се променя.
Редица променливи, които могат да се използват в редаproxy_cache_key,, могат да бъдат намерени в wiki на nginx.
Това е всичко, за нашия случай не е необходимо нищо повече. Системата за кеширане е доста гъвкава и ви позволява да кеширате резултатите от конкретни страници, които се показват за конкретни заявки, което ви позволява допълнително да облекчите натоварването на задните части.
UPD. Ако файловете не са създадени в кеша и има ред в регистрационния файл:
След това опитайте да увеличите буферите в http блока: