0

Использование кэширования браузера: как настроить на Apache или через .htaccess?

14

Проблема с кешированием браузера в 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 ответ(ов)

0

Я делал то же самое пару дней назад. Добавил следующее в свой файл .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, рекомендация о кэшировании в браузере больше не является критической.

Надеюсь, это поможет!

0

Я использую следующий подход для управления заголовками и кэшированием. Я не суперэксперт в 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

Эти настройки помогают оптимизировать кэширование ресурсов на моих сайтах. Если у кого-то есть советы или рекомендации, дайте знать!

0

Сначала нам нужно проверить, включены ли модули 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>

Эти настройки помогут вам управлять кэшированием статических ресурсов на вашем сервере.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь