Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118      119      120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 119. Модуль Apache mod_brotli

Модуль mod_brotli предоставляет BROTLI_COMPRESS выходной фильтр, который позволяет сжимать выходные данные с вашего сервера с использованием формата сжатия brotli перед отправкой клиенту по сети. Этот модуль использует библиотеку Brotli, которую можно найти по адресу https://github.com/google/brotli.

Примеры конфигураций

Сжатие и TLS

Некоторые веб-приложения уязвимы для атаки раскрытия информации, когда соединение TLS передает сжатые данные. Для получения дополнительной информации ознакомьтесь с подробностями об атаках семейства «BREACH».

Это простая конфигурация, которая сжимает распространенные типы текстового контента.

Сжимайте только несколько типов

 AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript 

Включение сжатия

Сжатие и TLS

Некоторые веб-приложения уязвимы для атаки раскрытия информации, когда соединение TLS передает сжатые данные. Для получения дополнительной информации ознакомьтесь с подробностями об атаках семейства «BREACH».

Выходное сжатие

Сжатие осуществляется фильтром BROTLI_COMPRESS . Следующая директива включит сжатие документов в контейнере, в котором они размещены:

 SetOutputFilter BROTLI_COMPRESS
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-brotli 

Если вы хотите ограничить сжатие определенными типами MIME в целом, вы можете использовать директиву AddOutputFilterByType . Вот пример включения сжатия только для html-файлов документации Apache:

 <Каталог "/your-server-root/manual">
 AddOutputFilterByType BROTLI_COMPRESS text/html
</Каталог> 

Примечание

Фильтр BROTLI_COMPRESS всегда вставляется после фильтров RESOURCE, таких как PHP или SSI. Он никогда не касается внутренних подзапросов.

Примечание

Существует переменная среды no-brotli , установленная через SetEnv , которая отключает сжатие brotli для определенного запроса, даже если оно поддерживается клиентом.

Работа с прокси-серверами

Модуль mod_brotli отправляет Vary: Accept-Encoding заголовок ответа HTTP, чтобы предупредить прокси-серверы о том, что кэшированный ответ следует отправлять только тем клиентам, которые отправляют соответствующий Accept-Encoding заголовок запроса. Это предотвращает отправку сжатого содержимого клиенту, который его не понимает.

Если вы используете какие-то специальные исключения, зависящие, например, от User-Agent заголовка, вы должны вручную настроить дополнение к Vary заголовку, чтобы предупредить прокси-серверы о дополнительных ограничениях. Например, в типичной конфигурации, где добавление фильтра BROTLI_COMPRESS зависит от User-Agent , следует добавить:

 Заголовок добавляет Vary User-Agent 

Если ваше решение о сжатии зависит от другой информации, кроме заголовков запроса ( например, версии HTTP), вы должны установить Vary для заголовка значение * . Это предотвращает полное кэширование совместимых прокси-серверов.

Пример

 Набор заголовков Варьируется * 

Обслуживание предварительно сжатого контента

Поскольку mod_brotli повторно сжимает содержимое каждый раз, когда делается запрос, можно получить некоторый выигрыш в производительности за счет предварительного сжатия содержимого и указания mod_brotli обслуживать их без повторного сжатия. Это может быть выполнено с помощью конфигурации, подобной следующей:

 <IfModule mod_headers.c>
 # Подавать сжатые CSS-файлы brotli, если они существуют
 # и клиент принимает brotli.
 RewriteCond "%{HTTP:Accept-encoding}" "br"
 RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
 RewriteRule "^(.*)\.css" "$1\.css\.br" [QSA]
 # Подавать сжатые JS-файлы brotli, если они существуют
 # и клиент принимает brotli.
 RewriteCond "%{HTTP:Accept-encoding}" "br"
 RewriteCond "%{REQUEST_FILENAME}\.br" "-s"
 RewriteRule "^(.*)\.js" "$1\.js\.br" [QSA]
 # Обслуживайте правильные типы контента и предотвращайте двойное сжатие.
 RewriteRule "\.css\.br$" "-" [T=text/css,E=no-brotli:1]
 RewriteRule "\.js\.br$" "-" [T=text/javascript,E=no-brotli:1]
 <FilesMatch "(\.js\.br|\.css\.br)$">
 # Подавать правильный тип кодировки.
 Заголовок добавляет Content-Encoding br
 # Заставить прокси кэшировать brotli &
 # файлы css/js без броттли отдельно.
 Добавление заголовка Vary Accept-Encoding
 </FilesMatch>
</ЕслиМодуль> 


Директива BrotliAlterETag

Описание:Как следует изменить исходящий заголовок ETag во время сжатия
Синтаксис: BrotliAlterETag AddSuffix|NoChange|Remove
По умолчанию: BrotliAlterETag AddSuffix
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_brotli

Директива BrotliAlterETag указывает, как следует изменять хедер ETag при сжатии ответа.

Добавитьсуффикс

Добавьте метод сжатия в конец ETag, в результате чего сжатые и несжатые представления будут иметь уникальные ETag. В другом модуле динамического сжатия, mod_deflate, он используется по умолчанию с версии 2.4.0. Этот параметр предотвращает отправку ответов «HTTP не изменен» (304) на условные запросы сжатого содержимого.

Без изменений

Не изменяйте ETag в сжатом ответе. В другом модуле динамического сжатия, mod_deflate, это было значение по умолчанию до версии 2.4.0. Этот параметр не соответствует свойству HTTP/1.1, согласно которому все представления одного и того же ресурса имеют уникальные ETag.

Удалять

Удалите заголовок ETag из сжатых ответов. Это предотвращает возможность выполнения некоторых условных запросов, но позволяет избежать недостатков предыдущих вариантов.



Директива BrotliCompressionMaxInputBlock

Описание:Максимальный размер входного блока
Синтаксис: BrotliCompressionMaxInputBlock value
По умолчанию: (automatic)
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_brotli

Директива BrotliCompressionMaxInputBlock определяет максимальный размер входного блока от 16 до 24 с оговоркой, что большие размеры блоков требуют больше памяти.



Директива BrotliCompressionQuality

Описание:Качество сжатия
Синтаксис: BrotliCompressionQuality value
По умолчанию: BrotliCompressionQuality 5
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_brotli

Директива BrotliCompressionQuality определяет качество сжатия (значение от 0 до 11). Более высокие значения качества приводят к лучшему, но и более медленному сжатию.



Директива BrotliCompressionWindow

Описание:Размер скользящего окна сжатия Brotli
Синтаксис: BrotliCompressionWindow value
По умолчанию: BrotliCompressionWindow 18
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_brotli

Директива BrotliCompressionWindow определяет размер скользящего окна сжатия brotli (значение от 10 до 24). Большие размеры окна могут улучшить качество сжатия, но требуют больше памяти.



Директива BrotliFilterNote

Описание:Помещает степень сжатия в заметку для регистрации
Синтаксис: BrotliFilterNote [type] notename
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_brotli

Директива BrotliFilterNote указывает, что к запросу следует приложить примечание о коэффициентах сжатия. Имя заметки — это значение, указанное для директивы. Вы можете использовать это примечание для статистических целей, добавив значение в свой журнал доступа.

Пример

 BrotliFilterСоотношение примечаний
LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"'
CustomLog "logs/brotli_log" 

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

Input
Сохраните количество байтов входного потока фильтра в примечании.
Output
Сохраните количество байт выходного потока фильтра в примечании.
Ratio
Сохраните коэффициент сжатия ( output/input * 100 ) в примечании. Это значение по умолчанию, если аргумент типа опущен.

Таким образом, вы можете зарегистрировать это следующим образом:

Точная регистрация

 Ввод BrotliFilterNote in-stream
Вывод BrotliFilterNote вне потока
Соотношение BrotliFilterNote Ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' brotli
CustomLog "logs/brotli_log" 

Смотрите также

  • mod_log_config


 <         > 

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118      119      120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru