Архивирование формируемых страниц с помощью настройки .htaccess

Здесь описано, как настроить ваш Apach сервер, чтобы он без дополнительного программирования автоматически архивировал страницы и отдавал их в сжатом виде.

Конфигурация Apache 1.3

<IfModule mod_gzip.c> # включаем gzip
mod_gzip_on Yes
# если рядом с запрашиваемым файлом есть сжатая версия с расширением .gz, то
# будет отдана именно она, ресурсы CPU расходоваться не будут
mod_gzip_can_negotiate Yes
# используем при статическом архивировании расширение .gz
mod_gzip_static_suffix .gz
# выставляем заголовок
Content-Encoding: gzip
AddEncoding gzip .gz # выставляем минимальный размер для сжимаемого файла
mod_gzip_minimum_file_size 1000
# и максимальный размер файла
mod_gzip_maximum_file_size 500000
# выставляем максимальный размер файла, сжимаемого прямо в памяти
mod_gzip_maximum_inmem_size 60000
# устанавливаем версию протокола, с которой будут отдаваться gzip-файлы

# на клиент mod_gzip_min_http 1000 # исключаем известные проблемные случаи
mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]"
mod_gzip_item_exclude reqheader "User-agent: Konqueror"
# устанавливаем сжатие по умолчанию для файлов .html
mod_gzip_item_include file \.html$
# включаем .css / .js файлы, подробнее о них ниже
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$
# дополнительно сжимаем другие текстовые файлы
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/
# отключаем 'Transfer-encoding: chunked' для gzip-файлов, чтобы
# страница уходила на клиент одним куском
mod_gzip_dechunk Yes
# добавляем заголовок Vary для корректного распознавания браузеров,
# находящихся за локальными прокси-серверами
mod_gzip_send_vary On
</IfModule>

<IfModule mod_headers.c>
# запрещаем прокси-серверам кэшировать у себя сжатые версии файлов
<FilesMatch .*\.(js|css|html|txt)$>
Header set Cache-Control: private
</FilesMatch>
</IfModule>

<IfModule mod_expires.c>
# включаем кэширование для всех файлов сроком на 10 лет
ExpiresActive On
ExpiresDefault "access plus 10 years"
# отключаем его для HTML-файлов
<FilesMatch .*\.(shtml|html|phtml|php)$>
ExpiresActive Off
</FilesMatch>
</IfModule>

Конфигурация Apache 2

# выставляем заголовок Content-Encoding: gzip
AddEncoding gzip .gz
# с самого начала включаем gzip для текстовых файлов
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
# и для favicon.ico
AddOutputFilterByType DEFLATE image/x-icon
# также для CSS- и JavaScript-файлов
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# далее устанавливаем максимальную степень сжатия (9)
# и максимальный размер окна (15). Если сервер не такой мощный,
# то уровень сжатия можно выставить в 1, размер файлов при этом
# увеличивается примерно на 20%.
DeflateCompressionLevel 9
DeflateWindowSize 15
# отключаем сжатие для тех браузеров, у которых проблемы с
# его распознаванием:
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
# указываем прокси-серверам передавать заголовок User-Agent для
# корректного распознавания сжатия
Header append Vary User-Agent
# запрещаем кэширование на уровне прокси-сервера для всех файлов,
# для которых у нас выставлено сжатие,
<FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$>
Header append Cache-Control: private
</FilesMatch>
# включаем кэширование для всех файлов сроком на 10 лет
ExpiresActive On
ExpiresDefault "access plus 10 years"
# отключаем его для HTML-файлов <FilesMatch .*\.(shtml|html|phtml|php)$>
ExpiresActive Off
</FilesMatch>

Вы можете добавить следующий код к своему htaccess файлу, чтобы сжать все Ваши JavaScript, CSS и файлы HTML, используя GZIP.

<IfModule mod_gzip.c>
mod_gzip_on         Yes
mod_gzip_dechunk    Yes
mod_gzip_item_include file          \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler       ^cgi-script$
mod_gzip_item_include mime      ^text\.*
mod_gzip_item_include mime      ^application/x-javascript.*
mod_gzip_item_exclude mime      ^image\.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

Сжатие вашего статичного контента с помощью gZip

Нужно вставить в ваш .htaccess файл следующий код:

<IfModule mod_deflate.c>
 # force deflate for mangled headers
 # developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
 <IfModule mod_setenvif.c>
 <IfModule mod_headers.c>
 SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
 RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
 </IfModule>
 </IfModule>

# HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
 <IfModule filter_module>
 FilterDeclare COMPRESS
 FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
 FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
 FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
 FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
 FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
 FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
 FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
 FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
 FilterChain COMPRESS
 FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
 </IfModule>

<IfModule !mod_filter.c>
 # Legacy versions of Apache
 AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
 AddOutputFilterByType DEFLATE application/javascript
 AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
 AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
 AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
 </IfModule>
 </IfModule>

Смотри также пример GZip сжатие с помощью .htaccess и PHP.


.