Настройка кэширования для статичных файлов в Apache2. Пошаговая инструкция в картинках.

Иван Никитин и партнерыНовостиРазноеНастройка кэширования для статичных файлов в Apache2. Пошаговая инструкция в картинках.

Меня тут в очередной раз спросили о настройке кэширования статики в Apache2 и предложили использовать связку nginx + apache. Однако я, например, не любитель такого решения и считаю, что на ненагруженных серверах это совершенно излишнее телодвижение, которое усложняет жизнь. Вместо того, чтобы ставить два и настраивать два сервера, куда проще просто передать правильные заголовки кэширования статики и избежать лишних запросов на сервер от пользователя. В этой заметке я расскажу как это сделать. Поскольку я сам далеко не эксперт в Linux и пишу для таких же не-экспертов, то я попросил бы экспертов относиться снисходительно к стилю повествования, а хабра-ыкспертов — пойти делать домашку по математике, а не лезть со своими заумными комментариями.

Итак, приступим. Для начала мы установим Midnight Commander – это что-то типа олдскульного Нортона, легендарного Norton Commander, если вы помните такой. Подключимся в консоль и пробуем набрать команду:

mc

Если ничего не получилось, набираем команду (предполагается, что у нас Ubuntu):

[shell]
sudo apt-get install mc
[/shell]

Соглашаемся и через минуту у нас установлен mc. Запускаем его первой командой.

Находим папку с Apache, как правило /etc/apache2, и открываем в панелях MC папки

mod-available
mod-enabled

mc
Панели mc

Нам нужно проверить в правой панели (mod-enabled) наличие ссылок (файлики с символом @ в правой панели) на нужные модули и при необходимости их добавить. Переходим в левую панель с помощью [Tab]. Итак, нужны следующие файлы (модули):

  • deflate.conf
  • deflate.load
  • expires.load
  • headers.load

Если каких-то файлов нет, то находим и отмечаем их в левой панели с помощью кнопочки [Ins] и далее нажимаем сначала [Ctrl] + [X] а потом [S]. Это приведет к созданию ссылки на отмеченные файлы в другой, правой панели.

Должно получится как на рисунке выше.

Далее идем в папку conf-avialiable (или если ее нет, то в папку conf.d) и создаем там пустой файл с именем caching.conf. Это можно сделать с помощью копки [Shift] + [F4] и вводим в него следующее содержимое

[shell]

Сжатие статики

<IfModule mod_mime.c>
AddType application/javascript js
</Ifmodule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
</Ifmodule>

Кэширование статики

<IfModule mod_expires.c>
ExpiresActive On

A0 = Access + 0 seconds

ExpiresDefault A0

1 YEAR – doesn’t change often

<FilesMatch “.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$”>
ExpiresDefault A29030400
Header set Cache-Control “max-age=29030400, public”
</FilesMatch>

1 WEEK – possible to be changed, unlikely

<FilesMatch “.(jpg|jpeg|png|gif|swf)$”>
ExpiresDefault A604800
Header set Cache-Control “max-age=604800, public”
</FilesMatch>

3 HOUR – core content, changes quickly

<FilesMatch “.(txt|xml|js|css)$”>
ExpiresDefault A10800
Header set Cache-Control “max-age=10800, public”
</FilesMatch>
</IfModule>
[/shell]

Лучше, конечно же, не набирать, а скачать готовый файл и положить его к себе на сервер.

После этого нужно также добавить ссылку на caching.conf в папочку conf-enabled. Если у вас таких папок нет и вы создали caching.conf прямо в conf.d – уже все сделано. Грубо говоря, этот файл должен читаться при старте Apache.

Теперь перестартуем сервер:

[shell]
service apache2 restart
[/shell]

Всё! Можно проверять. Откройте любую страницу с этого сервера в браузере и откройте консоль браузера [F12]. Перегрузите страницу и посмотрите в панели Network на передачу любого статичного файла (картинка, js, css). Вы должны увидеть следующие заголовки:

заголовки ответа
Заголовки ответа статичного файла

Собственно, всё. Этими самым вы резко снизите нагрузку с сервера, поскольку статика будет отдаваться пользователю только один раз. В этом легко убедиться — нажмите [F5] в браузере и посмотрите на коды ответа сервера — 304 файл не менялся. Эти файлы уже не передавались повторно:

статус 304
Статус ответа 304

Удачи вам!

Добавить комментарий