Nginx

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

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

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

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

Задний план

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

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

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

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

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

Accept-Encoding = "deflate, gzip"

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

Content-Encoding = "gzip"

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

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

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

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

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

[электронная почта защищена]: ~ $ sudo apt-get update
[электронная почта защищена]: ~ $ sudo apt-get install nginx -y
[электронная почта защищена]: ~ $ sudo service nginx start

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

[электронная почта защищена]: ~ $ nginx -v
версия nginx: nginx / 1.18.0 (Ubuntu)

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

[электронная почта защищена]: ~ $ wget https: // nginx.org / download / nginx-1.18.0.деготь.gz
--2021-02-07 02: 57: 33 - https: // nginx.org / download / nginx-1.18.0.деготь.gz
Разрешение nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Подключение к nginx.org (nginx.org) | 3.125.197.172 |: 443… подключено.
HTTP-запрос отправлен, ожидает ответа… 200 OK
Длина: 1039530 (1015 КБ) [приложение / октет-поток]
Сохранение в: 'nginx-1.18.0.деготь.gz '
nginx-1.18.0.деготь.gz 100% [============================================== ====================>] 1015 КБ 220 КБ / с в 4.8 с
2021-02-07 02:57:38 (212 КБ / с) - 'nginx-1.18.0.деготь.gz 'сохранено [1039530/1039530]

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

[электронная почта защищена]: ~ $ tar xzf nginx-1.18.0.деготь.gz

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

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

[электронная почта защищена]: ~ $ git clone https: // github.com / google / ngx_brotli - рекурсивный.

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

[электронная почта защищена]: ~ $ cd nginx-1.18.0 /
[электронная почта защищена]: ~ $ sudo ./ configure --with-compat --add-dynamic-module =… / ngx_brotli

Примечание: вы можете получить следующую ошибку при настройке

./ configure: ошибка: модулю перезаписи HTTP требуется библиотека PCRE.
Вы можете отключить модуль с помощью --without-http_rewrite_module
вариант, или установите библиотеку PCRE в систему, или создайте библиотеку PCRE
статически из источника с помощью nginx с помощью --with-pcre = вариант.

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

[электронная почта защищена]: ~ $ sudo apt-get install libpcre3-dev -y

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

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

[электронная почта защищена]: ~ $ sudo make modules

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

[электронная почта защищена]: ~ $ cd / nginx-1.18.0 / objs /
[электронная почта защищена]: ~ $ sudo cp  ngx_http_brotli *.так / usr / share / nginx / модули

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

[электронная почта защищена]: ~ $ ls ngx_http_brotli *.так
ngx_http_brotli_filter_module.так
ngx_http_brotli_static_module.так
  • Обычный модуль Brotli: Модуль ngx_http_brotli_filter_module.поэтому модуль сжимает все файлы на лету и, следовательно, требует больше вычислительных ресурсов
  • Статический модуль Brotli: Модуль ngx_http_brotli_static_module.поэтому модуль позволяет ему обслуживать предварительно сжатые статические файлы, следовательно, менее ресурсоемкие.

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

[электронная почта защищена]: ~ $ sudo vim / etc / nginx / nginx.conf
# Загрузить раздел модуля
load_module "модули / ngx_http_brotli_filter_module.так";
load_module "модули / ngx_http_brotli_static_module.так";

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

а также / USR / доля / nginx / модули / *.conf в приведенном выше файле, например:

http
# Включить папки с конфигами
включить / etc / nginx / conf.d / *.conf;
включить / usr / share / nginx / модули / *.conf;

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

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

бротли на;
brotli_static on;
brotli_comp_level 6;
приложение brotli_types / rss + xml приложение / xhtml + xml
текст / CSS текст / простой;

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

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

Значок «brotli_comp_level 6Директива устанавливает уровень качества динамического сжатия на 6. Может варьироваться от 0 до 11.

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

Сохраните изменения, перезапустите службу Nginx, набрав "Sudo service restart nginx" и все сделано.

Заключение

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

Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...
Лучшие приложения для сопоставления геймпадов для Linux
Если вам нравится играть в игры на Linux с помощью геймпада вместо стандартной системы ввода с клавиатуры и мыши, для вас есть несколько полезных прил...
Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...