Apache модуль · 10 min read · Sep 14, 2025
mod_gzip - обслуживание сжатого контента веб-сервером Apache - Страница 6
Автор: Майкл Шрёпл
Точное количество запрашиваемых функций должно быть описано дополнительными директивами конфигурации Apache, которые становятся доступными при интеграции модуля mod_gzip.
На данный момент действительно полная документация о воздействии этих директив недоступна; в общем, предположите, что
- почти все может быть использовано в любой среде, т. е. - в полном объеме сервера,
- в отдельных виртуальных хостах,
- в директориях или даже
- в файлах .htaccess и
- в основном применяются стандартные процедуры переопределения Apache - за исключением директив, которые определяют выбор контента для сжатия, где все становится немного сложнее.
Конфигурация, описанная ниже, действительно не предназначена для слепого копирования в вашу собственную конфигурацию - ее намерение скорее заключается в том, чтобы дать вам представление о том, сколько опций предоставляется. И опций много - по крайней мере, если вы ‘просто хотите получить сжатые выходные данные’ …
| загрузка | обязанности | предсжатый | бюрократия | управление данными | размеры файлов | требования | фильтры | кодировка передачи | ведение журнала | прокси |
#######################################
### Директивы конфигурации Apache ###
### для mod_gzip 1.3.26.1a ###
#######################################
##########################
### загрузка модуля ###
##########################
# ---------------------------------------------------------------------
# загрузить DLL / Win32:
# LoadModule gzip_module modules/ApacheModuleGzip.dll
#
# загрузить DSO / UNIX:
# LoadModule gzip_module modules/mod_gzip.so
#
# (ни одно из обоих, если модуль был скомпилирован статически;# точное имя файла может зависеть от точного метода компиляции, используемого
# для этого модуля)# ---------------------------------------------------------------------
########################
### обязанности ###
########################
# ---------------------------------------------------------------------
# использовать mod_gzip вообще?
mod_gzip_on Yes
# (вы можете особенно включить mod_gzip внутри центральной конфигурации сервера
# но отключить его внутри некоторых директорий или виртуальных
# хостов, используя эту директиву.)
# ---------------------------------------------------------------------
######################################
### статически предсжатые файлы ###
######################################
# ---------------------------------------------------------------------
# позволить mod_gzip выполнять 'частичную согласованность контента'?
mod_gzip_can_negotiate Yes
# (если эта опция активна и статический файл должен быть обслужен в сжатом
# виде, тогда mod_gzip будет искать статическую предсжатую
# версию этого файла с определенным дополнительным расширением - см. следующую
# директиву - которая будет доставлена с приоритетом. Это позволит
# избежать повторного сжатия одного и того же статического файла и, таким образом,
# сэкономить время ЦП.
# Никакого динамического кэширования этого файла не предусмотрено; в настоящее время пользователь
# сам отвечает за создание и обновление содержимого предсжатого
# файла.# Начиная с версии 1.3.19.2a mod_gzip автоматически распознает, является ли
# статически предсжатый файл старше своего несжатого
# оригинала, и в этом случае будет обслуживать содержимое оригинального
# файла в несжатом виде - чтобы скорее предоставить корректные данные, чем
# устаревшие ...)# ---------------------------------------------------------------------# расширение (суффикс) для статически предсжатых файлов
mod_gzip_static_suffix .gz
AddEncoding gzip .gz
# (эффект: см. предыдущую директиву; эта строка будет добавлена к
# имени оригинального файла.
# убедитесь, что вы настроили кодировку 'gzip' для этого расширения,
# потому что mod_gzip не обслуживает содержимое само по себе, а просто генерирует
# внутреннюю переадресацию Apache на этот URL. Поэтому оставшаяся
# конфигурация Apache отвечает за правильную настройку заголовка 'Content-Encoding'
# ...
# до версии 1.3.19.2a это значение не было настраиваемым.)# ---------------------------------------------------------------------# автоматические обновления для статически предсжатых файлов
mod_gzip_update_static No
# (если установлено в 'Yes', эта директива (новая в версии 1.3.26.1a) вызовет
# mod_gzip автоматически обновлять устаревшую версию любого
# статически предсжатого файла во время запроса, т. е. сжать
# изначально запрашиваемый файл и *перезаписать* предсжатый вариант
# файла им!
# для каждого автоматического обновления такого типа mod_gzip запишет сообщение
# с уровнем 'notice' в журнал ошибок Apache.
# в процессе этого mod_gzip будет напрямую читать содержимое оригинального файла.
# следовательно, это содержимое *не может* быть интерпретировано любым другим модулем Apache
# во время запроса. это может *не быть* тем, что вы хотите - надеюсь,
# это будет тем, что большинство пользователей хотят, потому что это работает *быстро* таким образом.
# используйте эту конфигурацию с большой осторожностью и убедитесь, что вы не
# случайно не перезаписываете ценные файлы в дереве URL.
# это *не является* функцией, которую следует использовать для массовых хостинговых серверов, особенно
# потому что mod_gzip может столкнуться с проблемами контроля доступа там -
# идентификатор пользователя, под которым работают процессы Apache, должен иметь доступ на запись
# к предсжатым файлам всех пользователей, что может не быть автоматически
# таковым.)
# [обработка ошибок mod_gzip в этой ситуации??? что будет обслужено?]# ---------------------------------------------------------------------
###################
### бюрократия ###
###################
# ---------------------------------------------------------------------
# отображение статуса для mod_gzip
mod_gzip_command_version '/mod_gzip_status'
# (определяет URL для отображения статуса mod_gzip; может быть указано
# индивидуально для каждой установки и защищено от доступа через
# секцию по соображениям конфиденциальности)
# ---------------------------------------------------------------------
# Отображение статуса будет выглядеть следующим образом:
# mod_gzip доступен...
# mod_gzip_version = 1.3.26.1a
# mod_gzip_on = Yes/No
# и, таким образом, предоставит информацию о
# - mod_gzip установлен на сервере и работает корректно,
# - какая версия была установлена и
# - активирован ли mod_gzip для этого местоположения
# (-> mod_gzip_on)
# ---------------------------------------------------------------------
#######################
### управление данными ###
#######################
# ---------------------------------------------------------------------
# Рабочий каталог для временных файлов и кэша сжатия
# если не указано, используются следующие значения по умолчанию:
# [Win32=c:\temp], [UNIX=/tmp]
# mod_gzip_temp_dir /tmp
# (Этот каталог должен уже существовать, и идентификатор пользователя, используемый для
# запуска сервера Apache, должен иметь доступ на чтение и запись к этому
# каталогу.
# В отличие от других директив Apache здесь должно быть указано абсолютное имя пути;
# относительное значение не будет интерпретировано относительно ServerRoot.
# Этот путь не должен заканчиваться '/'.
# Для максимальной производительности этот каталог должен находиться на диске RAM,
# если файловая система уже не кэшируется эффективно
# ---------------------------------------------------------------------
# Сохранить временные рабочие файлы [Да, Нет]
mod_gzip_keep_workfiles No
# (один файл на HTTP-запрос - установите в 'да' только для целей отладки!)
# ---------------------------------------------------------------------
##################
### размеры файлов ###
##################
# ---------------------------------------------------------------------
# минимальный размер (в байтах) для файлов, которые будут сжаты
mod_gzip_minimum_file_size 500
# (для очень маленьких файлов сжатие даст лишь небольшие абсолютные выгоды
# [вы все равно сэкономите около 50% содержимого, но некоторые дополнительные
# 500 байт HTTP и TCP заголовков всегда останутся несжатыми],
# но все равно создаст нагрузку на ЦП как для клиента, так и для сервера.
# mod_gzip автоматически установит меньшие значения, чем 300 байт для
# этой директивы, именно на это значение 300.)
# ---------------------------------------------------------------------
# максимальный размер (в байтах) для файлов, которые будут сжаты
mod_gzip_maximum_file_size 500000
# (для очень больших файлов сжатие может занять довольно много времени и
# таким образом задержать начало передачи.
# Кроме того, ограничение в этот момент предотвращает сервер от
# создания вывода неограниченного размера в случае бесконечного цикла
# внутри CGI-скрипта - или даже попытки сжать потоковые данные -
# что в противном случае может вызвать создание временного файла любого
# размера и даже заполнить весь жесткий диск.
# С другой стороны, сжатие будет иметь гораздо более заметный
# субъективный эффект для больших файлов ... так что убедитесь, что вы точно настроили это
# в соответствии с вашими требованиями.)
# ---------------------------------------------------------------------
# максимальный размер (в байтах) для файлов, которые будут сжаты в памяти
mod_gzip_maximum_inmem_size 60000
# (более крупные файлы будут сжаты в каталог временных файлов; адаптируйте
# это значение к доступной основной памяти вашего сервера.
# В mod_gzip 1.3.19.x более крупные значения будут автоматически ограничены до
# 60000, потому что некоторые операционные системы, как сообщается, имеют проблемы
# с выделением более 64 кб памяти за раз.
# ---------------------------------------------------------------------
####################
### требования ###
####################
# (см. главу о кэшировании для проблем при использовании этих директив.)
# ---------------------------------------------------------------------
# Требуемая версия HTTP клиента
# Возможные значения: 1000 = HTTP/1.0, 1001 = HTTP/1.1, ...
# Эта директива использует те же числовые значения протокола, что и Apache
# внутренне
mod_gzip_min_http 1000
# (Используя эту директиву, вы можете исключить старые браузеры, поисковые системы
# и т. д. из процедуры сжатия: если пользовательский агент не
# заявляет о своей способности понимать хотя бы уровень HTTP,
# указанный здесь, только несжатые данные будут доставлены - независимо от
# того, что еще он утверждает, что может. Значение '1001' особенно
# исключит Netscape 4.x. и множество прокси-серверов.)
# --------------------------------------------------------------------- # HTTP методы, которые будут обрабатываться
# Возможные значения: 'GET', 'POST' или список обоих значений.
mod_gzip_handle_methods GET POST
# (Используя эту директиву, вы можете особенно исключить POST-запросы
# из процедуры сжатия. Известны случаи, когда обработка этих запросов
# предыдущими версиями mod_gzip могла вызвать проблемы.
# До версии 1.3.19.2a это значение не было настраиваемым.)# ---------------------------------------------------------------------
###############
### фильтры ###
###############
# ---------------------------------------------------------------------
# какие файлы должны быть сжаты?
#
# Порядок обработки в каждой из обеих фаз не важен,
# но чтобы инициировать сжатие содержимого запроса, этот запрос
# a) *должен соответствовать хотя бы одному правилу включения в каждой из обеих фаз* и
# b) *не должен соответствовать правилу исключения в любой из обеих фаз.*
# Эти правила не минимальны, они предназначены только для примера.
## Обратите внимание, что все значения параметров директив в этом разделе
# оцениваются как регулярные выражения и *не* чувствительны к регистру.# ---------------------------------------------------------------------
# фаза 1: (reqheader, uri, file, handler)
# ========================================
# НЕТ: специальные сломанные браузеры, которые запрашивают сжатый контент
# но затем не могут обрабатывать его правильно
mod_gzip_item_exclude reqheader "User-agent: Mozilla/4.0[678]"
# Начиная с версии 1.3.19.2a я *не рекомендую использовать фильтры*
# *для пользовательских агентов*, так как это приведет к созданию HTTP-заголовков 'Vary: User-Agent'
# и, таким образом, усложнит жизнь прокси-серверам.#
# ДА: HTML-документы
mod_gzip_item_include file \.html$
#
# НЕТ: включить файлы / JavaScript и CSS (из-за ошибок Netscape4)
mod_gzip_item_exclude file \.js$
mod_gzip_item_exclude file \.css$
#
# ДА: CGI-скрипты
mod_gzip_item_include file \.pl$
mod_gzip_item_include handler ^cgi-script$
#
# фаза 2: (mime, rspheader)
# ===========================
# ДА: обычные HTML-файлы, обычные текстовые файлы, списки директорий Apache
mod_gzip_item_include mime ^text/html$
mod_gzip_item_include mime ^text/plain$
mod_gzip_item_include mime ^httpd/unix-directory$
#
# НЕТ: изображения (GIF и т. д., редко когда что-то сэкономит)
mod_gzip_item_exclude mime ^image/
# ---------------------------------------------------------------------
# На самом деле mod_gzip проверяет только первые 4 символа первого
# операнда (в случае uri даже только первые 2 символа, чтобы
# позволить значениям, таким как url).
# ---------------------------------------------------------------------
# Таблица правил mod_gzip_item (включить и исключить) не может содержать
# более 256 записей; когда это число превышается, mod_gzip выведет
# сообщение "mod_gzip: ERROR: Индекс элемента полон"
# и сообщит об ошибке конфигурации серверу Apache.
# ---------------------------------------------------------------------
# Описанные здесь значения директив предназначены для того, чтобы описать запросы,
# выбранные для сжатия *наиболее точно*.
# Особенно для правил mime необходимо уточнить, что HTTP
# заголовок 'Content-Type' (который будет проверяться mod_gzip для этого правила)
# в некоторых случаях может содержать не только MIME-тип, но и
# описание набора символов (charset).
# Если это так для обрабатываемых запросов, то вам нужно
# удалить символ '$' в конце соответствующего значения, чтобы теперь
# только префикс этого значения проверялся на соответствие.
# ---------------------------------------------------------------------
##########################
### кодировки передачи ###
##########################
# ---------------------------------------------------------------------
# Позволить mod_gzip устранить HTTP-заголовок
# 'Transfer-encoding: chunked'
# и объединить фрагменты в один (сжимаемый) пакет
mod_gzip_dechunk Yes
# (это необходимо для обработки нескольких типов динамически сгенерированного
# содержимого, особенно для страниц CGI и SSI, но также и для страниц, производимых
# некоторыми интерпретаторами Java Servlet.
# ---------------------------------------------------------------------
###############
### ведение журнала ###
###############
# ---------------------------------------------------------------------
# Расширенный формат журнала (для тестирования эффекта сжатия)
LogFormat "%h %l %u %t \"%V %r\" %
# ---------------------------------------------------------------------
# Создать дополнительный файл журнала
CustomLog logs/mod_gzip.log common_with_mod_gzip_info2
# (конечно, вы можете переопределить формат вашего обычного файла журнала, но вы можете
# сохранить его формат стандартно совместимым для оценки стандартными веб-
# аналитическими инструментами. Так что мы просто создаем еще один файл журнала.)
# ---------------------------------------------------------------------
# Объем вычисления доставленных файлов внутри журнала доступа Apache:
# учитывайте размер HTTP-заголовка (в байтах) как часть общего размера вывода
mod_gzip_add_header_count Yes
# (Это будет больше, чем чистое содержимое документа, но это более
# реалистично опишет общий выходной трафик HTTP-запроса)
# ---------------------------------------------------------------------
###############
### прокси ###
###############
# ---------------------------------------------------------------------
# отправка HTTP-заголовка 'Vary'
mod_gzip_send_vary On
# (см. главу о кэшировании для этой директивы.)
# *не изменяйте это, если вы абсолютно не знаете, что делаете!*
# ---------------------------------------------------------------------
Порядок загрузки модулей
При динамическом добавлении этого модуля вы должны помнить, что mod_gzip должен быть указан как последний из нескольких директив LoadModule, которые будут использоваться.
Это связано с тем, что Apache будет внутренне строить стек из директив LoadModule и позже оценивать его в обратном порядке.
mod_gzip подключается к routine type_checker Apache; но только первый из всех модулей, объявляющих себя ответственными за обработку запроса (например, ColdFusion и SSL попытаются это сделать) действительно будет активирован Apache. Поэтому mod_gzip должен быть активирован до тех модулей, вывод которых он хочет перенаправить в себя и затем обработать - пока эти модули пытаются использовать тот же интерфейс type_checker … если они этого не делают, то это может работать независимо от этого порядка директив.
Во время стартового сообщения Apache (которое можно найти, например, в журнале ошибок Apache) модули с индивидуальными спецификациями версий могут быть перечислены точно в порядке, в котором они появляются в цепочке модулей; там mod_gzip должен быть перечислен до других модулей, вывод которых предназначен для сжатия.
Оригинальное местоположение этого документа:
Get new posts in your inbox
No spam. Unsubscribe anytime.