Поиск по сайту:
Люди учатся, как говорить, а главная наука — как и когда молчать (Л. Толстой).

Как включить сжатие Brotli в Nginx

02.03.2021
Как настроить блоков сервера Nginx на Ubuntu и CentOS

Сжатие Brotli – это универсальный метод сжатия, широко поддерживаемый браузерами. Это сопоставимо с доступными в настоящее время методами сжатия, поскольку обеспечивает на 20-26% лучшую степень сжатия. Тем не менее, это бесполезно, если веб-сервер не отправляет сжатые текстовые ресурсы с алгоритмом Brotli.

В этой статье мы узнаем, как сжатие работает на сервере и чем оно полезно? Мы также научимся устанавливать сервер Nginx и заставим наш сервер предоставлять сжатые файлы Brotli.

 

Background

Методы/алгоритмы сжатия повышают производительность веб-сайта за счет уменьшения размера содержимого. Следовательно, сжатые данные требуют небольшого времени загрузки и передачи. Однако у этого есть цена. Серверы используют много вычислительных ресурсов, чтобы обеспечить лучшую степень сжатия. Значит, чем лучше, тем дороже. Таким образом, прилагается много усилий для улучшения форматов сжатия при использовании минимальных циклов процессора.

К настоящему времени наиболее потенциальным форматом сжатия был gzip. Недавно на смену gzip пришел новый алгоритм сжатия, известный как Brotli. Это усовершенствованный алгоритм сжатия, состоящий из кодирования Хаффмана, алгоритма L77 и контекстного моделирования. Напротив, Gzip построен на алгоритме Deflate.

Формат сжатия без потерь, разработанный Google, тесно связан с форматом сжатия deflate. Оба метода сжатия используют скользящие окна для обратных ссылок. Размер скользящего окна Brotli составляет от 1 КБ до 16 МБ. Напротив, Gzip имеет фиксированный размер окна 32 КБ. Это означает, что окно Brotli в 512 раз больше, чем окно deflate, что не имеет значения, поскольку текстовые файлы размером более 32 КБ редко находятся на веб-серверах.

 

Совместимость с серверным сжатием важна

Каждый раз, когда мы загружаем файл из браузера, браузер запрашивает сервер, какой тип сжатия он поддерживает, через заголовок. Например, если браузер поддерживает gzip и deflate для распаковки. Он добавит эти параметры в свой заголовок Accept-Encoding:

Читать  Как перезапустить оболочку GNOME из командной строки, не закрывая никаких приложений (только X11)

Accept-Encoding=”deflate, gzip”

 

Следовательно, браузеры, которые не поддерживают эти форматы, не будут включать их в заголовок. Когда сервер отвечает контентом, он сообщает браузеру о формате сжатия через заголовок Content-Encoding. Следовательно, если он поддерживает gzip, то заголовок выглядит так:

Content-Encoding=”gzip”

 

Заголовки браузеров, таких как Firefox, которые поддерживают сжатие Brotli, и веб-сервера, на котором установлен модуль Brotli, выглядят следующим образом:

Accept-Encoding=”deflate, gzip, br”
Content-Encoding=”gzip, br”

 

Следовательно, если браузер использует лучший формат сжатия, а веб-сервер – нет, это бесполезно, поскольку веб-сервер не будет отправлять обратно файлы с предпочтительным алгоритмом сжатия. Вот почему так важно установить модуль сжатия для веб-сервера.

 

Установка сервера

Прежде чем продолжить настройку Brotli, мы настроим наш сервер Nginx. Перед этим sudo apt-get обновите ваш дистрибутив Ubuntu и введите следующие команды в свой терминал bash.

andreyex@ubuntu:~$ sudo apt-get update
andreyex@ubuntu:~$ sudo apt-get install nginx -y
andreyex@ubuntu:~$ sudo service nginx start

 

Чтобы включить сжатие Brotli в Nginx, мы скомпилируем наши модули .so в соответствии с информацией о нашей версии Nginx. Как показано, при вводе следующей команды будет выведена версия Nginx:

andreyex@ubuntu:~$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

 

Используйте команду wget вместе со сведениями о вашей версии nginx, чтобы загрузить исходный код с веб-сайта Nginx.

andreyex@ubuntu:~$ wget https://nginx.org/download/nginx-1.18.0.tar.gz
--2021-02-07 02:57:33--  https://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6, ...
Connecting to nginx.org (nginx.org)|3.125.197.172|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: 'nginx-1.18.0.tar.gz'

nginx-1.18.0.tar.gz             100%[==================================================================>]   1015K   220KB/s in 4.8s

2021-02-07 02:57:38 (212 KB/s) - ‘nginx-1.18.0.tar.gz’ saved [1039530/1039530]

 

Мы будем использовать этот исходный код для компиляции двоичных файлов *.so для сжатия Brotli. Теперь извлеките файл, используя следующую команду.

andreyex@ubuntu:~$ tar xzf nginx-1.18.0.tar.gz

Конфигурация модуля Brotli

Теперь Google выпустила модуль Brotli для Nginx. Мы будем git-клонировать модуль из репозитория Google: https://github.com/google/ngx_brotli.

andreyex@ubuntu:~$ git clone https://github.com/google/ngx_brotli --recursive.

 

Читать  Автоматический выход неактивных пользователей из системы Linux

Мы cd в в Nginx-1.18.0 папку для настройки динамического Brotli модуля.

andreyex@ubuntu:~$ cd nginx-1.18.0/
andreyex@ubuntu:~$ sudo ./configure --with-compat --add-dynamic-module=../ngx_brotli

 

Примечание
Вы можете получить следующую ошибку при настройке
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

 

В этом случае выполните следующую команду, чтобы установить библиотеку pcre.

andreyex@ubuntu:~$ sudo apt-get install libpcre3-dev -y

Компиляция модуля

Мы будем использовать команду make для создания папки модулей внутри каталога nginx-1.18.0.

andreyex@ubuntu:~$ sudo make modules

 

Мы используем команду cp для копирования файлов ngx_http_brotli * .so из папки nginx-1.18.0/objs в папку модулей.

andreyex@ubuntu:~$ cd /nginx-1.18.0/objs/
andreyex@ubuntu:~$ sudo cp  <strong>ngx_http_brotli*.so </strong>/usr/share/nginx/modules

 

Теперь перечислите содержимое файлов с помощью команды ls. Вы заметите, что он состоит из двух разных файлов модулей, то есть:

andreyex@ubuntu:~$ ls ngx_http_brotli*.so

ngx_http_brotli_filter_module.so
ngx_http_brotli_static_module.so
  • Обычный модуль Brotli: модуль ngx_http_brotli_filter_module.so сжимает все файлы на лету и, следовательно, требует больше вычислительных ресурсов.
  • Статический модуль Brotli: модуль ngx_http_brotli_static_module.so позволяет ему обслуживать предварительно сжатые статические файлы, следовательно, менее ресурсоемкие.

 

Теперь используйте свой любимый редактор, чтобы открыть файл /etc/nginx/nginx.conf, чтобы добавить модули загрузки Brotli, чтобы начать настройку Brotli, включив следующие строки:

andreyex@ubuntu:~$ sudo vim /etc/nginx/nginx.conf

# Load module section
load_module "modules/ngx_http_brotli_filter_module.so";
load_module "modules/ngx_http_brotli_static_module.so";

 

Мы также включим пути к папкам конфигурации /etc/nginx/conf.d/*.conf

Читать  Проверка и исправление ошибок файловой системы с помощью команды fsck в Linux

и /usr/share/nginx/modules/*.conf в указанном выше файле, например:

http {
# Include configs folders
include /etc/nginx/conf.d/*.conf;
include /usr/share/nginx/modules/*.conf;
}

 

Чтобы добавить конфигурацию Brotli, откройте /etc/nginx/conf.d/brotli.conf

в редакторе vim и включите Brotli, установив следующие директивы конфигурации:

brotli     on;
brotli_static        on;
brotli_comp_level          6;
brotli_types         application/rss+xml application/xhtml+xml
text/css text/plain;

 

Значение «brotli off|on» включает или отключает динамическое сжатие содержимого или сжатие «на лету».

Параметр ‘brotli_ static on’ позволяет серверу Nginx проверять, существуют ли предварительно сжатые файлы с расширениями .br или нет. Мы также можем включить этот параметр в параметр « выключено» или « всегда». Значение always позволяет серверу отправлять предварительно сжатый контент без подтверждения, поддерживает его браузер или нет. Поскольку Brotli является ресурсоемким, этот модуль лучше всего подходит для уменьшения количества узких мест.

В «brotli_comp_level 6» устанавливает динамический уровень качества сжатия до 6. Это может быть в диапазоне от 0 до 11.

Наконец, включите динамическое сжатие для определенных типов MIME, тогда как ответы text/html всегда сжимаются. Синтаксис по умолчанию для этой директивы – brotli_types [type mime]. Вы можете найти больше о директиве конфигурации на Github .

Сохраните изменения, перезапустите службу Nginx, набрав «sudo service restart nginx», и все готово.

 

Вывод

После внесения изменений вы заметите очевидные улучшения показателей производительности. Однако у него есть небольшой недостаток – повышенная загрузка процессора в часы пик. Чтобы избежать подобных ситуаций, следите за загрузкой процессора; если он регулярно достигает 100%, мы можем использовать множество параметров в соответствии с нашими предпочтениями, например, представление предварительно сжатого или статического содержимого, снижение уровня сжатия и отключение сжатия на лету.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 3,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
В этой статье объясняется, как разделить строки в Python с…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: