Настройка кеширования статики в Apache

Далеко не все знают, что по умолчанию в Apache кеширование отключено. Это означает, что каждый раз, когда пользователь просматривает страницу, ему приходится каждый раз скачивать все файлы сайта: и CSS, и JavaScript, и картинки. Это создает лишнюю нагрузку на сервер, расходует траффик пользователя и замедляет работу сайта. Что же сделать, чтобы этого не было? Очень просто: прописать в настройках Apache выдачу заголовков, которые позволят использовать кеширование на стороне пользователя. Делается это очень просто:

либо в файл apache2.conf, либо в .htaccess на каждом сайте прописываем следующие директивы:

<ifModule mod_deflate.c> 
# Включение GZIP-сжатия для различных типов файлов: TXT, SVG, RSS, javascript
AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf x-font/eot x-font/ashx
AddOutputFilterByType DEFLATE font/truetype font/opentype
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</ifModule>

<ifModule mod_expires.c>
#включение заголовка Expires, указывающего время устаревания файла
ExpiresActive On
ExpiresDefault "access plus 3600 seconds"
# по умолчанию время устаревания составляет час, но для некоторых типов файлов мы его переопределим
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType application/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>

<ifModule mod_headers.c>
# Самая главная часть: выдача заголовка, разрешающего кеш определенных типов файлов
<filesMatch "\.(ico|jpe?g|png|gif|swf|svg|webp)$">
Header set Cache-Control "max-age=25920000"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "max-age=25920000"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "max-age=25920000"
</filesMatch>
</ifModule>

Если у вас свой VDS, необходимо проверить, что Apache запускается с модулями headers, expires, deflate. В Debian это можно сделать с помощью утилиты a2enmod:
# a2enmod headers expires deflate В других системах придется отредактировать файл apache2.conf и посмотреть, есть ли там директива LoadModule для соответствующих модулей.


0