Использование кэширования браузера: как настроить на Apache или через .htaccess?
Проблема с кешированием браузера в Apache
У меня есть длинный список файлов, который Google Speed Page сообщает, что нужно "Использовать кеширование браузера", но я не знаю, как это сделать. Нужно ли мне изменять конфигурационный файл Apache (приведен ниже) или достаточно добавить что-то в файл .htaccess?
Вот мой текущий конфигурационный файл Apache:
<IfModule mod_proxy.c>
ProxyRequests Off
CacheRoot "/var/run/proxy"
CacheSize 1024
CacheGcInterval 24
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
<Directory "disabled_proxy">
Allow from example.com
Deny from all
Order Deny,Allow
</Directory>
</IfModule>
##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A60
ExpiresByType image/bmp A3600
ExpiresByType image/gif A3600
ExpiresByType image/ief A3600
ExpiresByType image/jpeg A3600
ExpiresByType image/png A3600
ExpiresByType image/tiff A3600
ExpiresByType image/x-cmu-raster A3600
ExpiresByType image/x-portable-anymap A3600
ExpiresByType image/x-portable-bitmap A3600
ExpiresByType image/x-portable-graymap A3600
ExpiresByType image/x-portable-pixmap A3600
ExpiresByType image/x-rgb A3600
ExpiresByType image/x-xbitmap A3600
ExpiresByType image/x-xpixmap A3600
ExpiresByType image/x-xwindowdump A3600
ExpiresByType audio/basic A3600
ExpiresByType audio/midi A3600
ExpiresByType audio/mpeg A3600
ExpiresByType audio/x-aiff A3600
ExpiresByType audio/x-pn-realaudio A3600
ExpiresByType audio/x-pn-realaudio-plugin A3600
ExpiresByType audio/x-realaudio A3600
ExpiresByType audio/x-wav A3600
ExpiresByType video/mpeg A3600
ExpiresByType video/quicktime A3600
ExpiresByType video/x-msvideo A3600
ExpiresByType video/x-sgi-movie A3600
</IfModule>
Как я могу настроить кеширование браузера правильно? Нужно ли что-то убрать или изменить в данной конфигурации, или же стоит добавить параметры в .htaccess? Спасибо за помощь!
3 ответ(ов)
Я делал то же самое пару дней назад. Добавил следующее в свой файл .htaccess:
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/png A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType text/css A86400
ExpiresByType text/javascript A86400
ExpiresByType application/x-shockwave-flash A2592000
#
<FilesMatch "\.(gif¦jpe?g¦png¦ico¦css¦js¦swf)$">
Header set Cache-Control "public"
</FilesMatch>
Теперь, когда я проверяю сайт на Google PageSpeed, рекомендация о кэшировании в браузере больше не является критической.
Надеюсь, это поможет!
Я использую следующий подход для управления заголовками и кэшированием. Я не суперэксперт в Apache, так что дайте знать, если есть возможность улучшить настройки, но они уже хорошо работают на всех моих сайтах на протяжении некоторого времени.
Mod_expires
Этот модуль управляет установкой заголовка Expires и директивы max-age заголовка Cache-Control в ответах сервера. Дата истечения может быть задана относительно времени последнего изменения исходного файла или времени обращения клиента.
Эти HTTP заголовки служат инструкцией для клиента о действительности и стабильности документа. Если документ закэширован, он может быть извлечен из кэша вместо обращения к исходнику до истечения этого времени. После этого копия в кэше считается "устаревшей" и недействительной, и новую копию нужно получить из источника.
# BEGIN Expires
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 216000 seconds"
ExpiresByType application/x-javascript "access plus 216000 seconds"
</ifModule>
# END Expires
Mod_headers
Этот модуль предоставляет директивы для управления и модификации заголовков HTTP-запросов и ответов. Заголовки могут быть объединены, заменены или удалены.
# BEGIN Caching
<ifModule mod_headers.c>
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "max-age=604800, public"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "max-age=216000, private"
</filesMatch>
<filesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=216000, public, must-revalidate"
</filesMatch>
<filesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=1, private, must-revalidate"
</filesMatch>
</ifModule>
# END Caching
Эти настройки помогают оптимизировать кэширование ресурсов на моих сайтах. Если у кого-то есть советы или рекомендации, дайте знать!
Сначала нам нужно проверить, включены ли модули mod_headers.c
и mod_expires.c
. Это можно сделать с помощью следующей команды:
sudo apache2 -l
Если модули не включены, активируйте их с помощью команды:
sudo a2enmod headers
Затем необходимо перезапустить Apache, чтобы изменения вступили в силу:
sudo apache2 restart
В конце добавьте правила в файл .htaccess
(эти правила можно найти и в других ответах). Пример конфигурации:
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/png A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType text/css A86400
ExpiresByType text/javascript A86400
ExpiresByType application/x-shockwave-flash A2592000
#
<FilesMatch "\.(gif|jpe?g|png|ico|css|js|swf)$">
Header set Cache-Control "public"
</FilesMatch>
Эти настройки помогут вам управлять кэшированием статических ресурсов на вашем сервере.
Функции startsWith() и endsWith() в PHP
Как получить расширение файла в PHP?
Как читать большой файл построчно?
ReCaptcha 2.0 с использованием AJAX
Почему нельзя вызывать абстрактные функции из абстрактных классов в PHP?