По умолчанию Apache настроен так, что кеширование запрещено даже для статического контента. Это означает, что при каждом обращении к сайту заново подгружаются все файлы CSS, JavaScript и картинки, что явно не способствует быстродействию.
Чтобы этого избежать, следует настроить выдачу заголовков Expires (время устаревания контента), ETag (строка, которая изменяется в случае изменения файла) и Cache Control (управление кешированием).
В Apache 2.x это делается с помощью следующих директив:
# добавление сжатия файлов AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/x-javascript # обработка "кривых" броузеров BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch Konqueror no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent # разрешение кеширования файлов на стороне клиента Header append Cache-Control private # включение заголовка Expires для всех файлов сроком на месяц ExpiresActive On ExpiresDefault "access plus 1 month" # выключение Expires для HTML-файлов и PHP-скриптов ExpiresActive Off # Выдача заголовка ETag FileETag MTime Size
Для Apache 1.3 с модулем mod_gzip:
Header append Vary User-Agent # разрешение кеширования файлов на стороне клиента Header append Cache-Control private # включение заголовка Expires для всех файлов сроком на месяц ExpiresActive On ExpiresDefault "access plus 1 month" # выключение Expires для HTML-файлов и PHP-скриптов ExpiresActive Off # Выдача заголовка ETag FileETag MTime Size # Включение модуля mod_gzip mod_gzip_on Yes mod_gzip_can_negotiate Yes mod_gzip_static_suffix .gz AddEncoding gzip .gz mod_gzip_update_static No mod_gzip_command_version '/mod_gzip_status' mod_gzip_temp_dir /tmp mod_gzip_keep_workfiles No mod_gzip_minimum_file_size 500 mod_gzip_maximum_file_size 5000000 mod_gzip_maximum_inmem_size 60000 mod_gzip_min_http 1000 mod_gzip_handle_methods GET POST mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]" mod_gzip_item_include file \.html$ mod_gzip_item_include file \.js$ mod_gzip_item_include file \.css$ # mod_gzip_item_include file \.pl$ # mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/html$ mod_gzip_item_include mime ^text/plain$ mod_gzip_item_include mime ^httpd/unix-directory$ mod_gzip_item_exclude mime ^image/ mod_gzip_dechunk Yes mod_gzip_add_header_count Yes