Сервер

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

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

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

mc

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

sudo apt-get install mc

Соглашаемся и через минуту у нас установлен 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] и вводим в него следующее содержимое

# Сжатие статики
<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>

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

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

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

service apache2 restart

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

заголовки ответа

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

 

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

статус 304

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

 

Удачи вам!

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *