Настройка кеширования статики в 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-truetype application/x-font-opentype application/font-woff
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 image/svg+xml "access plus 2592000 seconds"
ExpiresByType application/x-font-ttf "access plus 2592000 seconds"
ExpiresByType application/x-font-truetype "access plus 2592000 seconds"
ExpiresByType application/x-font-opentype "access plus 2592000 seconds"
ExpiresByType application/font-woff "access plus 2592000 seconds"
ExpiresByType application/font-woff2 "access plus 2592000 seconds"
ExpiresByType application/vnd.ms-fontobject "access plus 2592000 seconds"
ExpiresByType application/font-sfnt "access plus 2592000 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|ttf|otf|woff|woff2|eot|sfnt)$">
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 для соответствующих модулей.
> headREs
опечатка, исправьте пожалуйста.