Как установить brotli и увеличить скорость загрузки сайта на nginx

Один из способов ускорить работу сайта — кэширование данных. Один из эффективных методов сжатия — установка модуля brotli, разработанного Google.

Для установки данного модуля нужно пересобирать веб-сервер nginx, на котором расположен сайт. Но это долгий процесс и может помешать работе уже существующего сайта. Поэтому мы нашли способ, как этого избежать.

Его мы использовали, например, на проекте МонакоМода. Это позволило ускорить загрузку сайта на 35 пунктов по Google Pagespeed без рисков для стабильности.

Для реализации нужен root-доступ к серверу сайта, а сам сайт должен быть с защищенным соединением SSL. Если это есть, нужно выполнить следующие шаги:

Шаг 1 - Установка исходников nginx

Прежде чем начать, надо обновить сам сервер, все его модули, а также установить дополнительные библиотеки:

sudo apt update

sudo apt install -y build-essential git apt-transport-https socat

Смотрим свою версию nginx:

nginx -v

После обновлений и проверок, можно скачивать исходники:

wget https://nginx.org/download/nginx-1.14.1.tar.gz && tar zxvf nginx-1.14.1.tar.gz

rm nginx-1.14.1.tar.gz

Шаг 2 - Скачивание модуля brotli и перенос его на боевой nginx

Скачиваем модуль:

git clone https://github.com/eustas/ngx_brotli.git

cd ngx_brotli && git submodule update --init && cd ~

Переходим в папку с исходниками nginx и добавляем модули:

cd ~/nginx-1.14.1

sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev

Затем скомпилируем модуль в этой же папке:

./configure --with-compat --add-dynamic-module=../ngx_brotli

make modules

sudo cp objs/*.so /etc/nginx/modules

"/etc/nginx/modules" - это адрес папке, где находятся модули боевого nginx, обычно он всегда такой, но лучше пред этим проверить

После таких махинаций, смотрим что все файлы появились в папке (ngx_http_brotli_filter_module.so, ngx_http_brotli_static_module.so):

ls /etc/nginx/modules

Устанавливаем разрешение 644 для всех файлов .so:

sudo chmod 644 /etc/nginx/modules/*.so

Шаг 3 - Настройка боевого nginx

Переходим в папку самого nginx и находим конфиг /etc/nginx/nginx.conf, в нем мы добавляем вот такие строки:

load_module modules/ngx_http_brotli_filter_module.so;

load_module modules/ngx_http_brotli_static_module.so;

Это позволяет нам подключить сам модуль. После этого проверяем nginx на ошибки sudo nginx -t, если все нормально, то мы настроили все верно.

Дальше заходим в конфиг нужного сайта и активируем brotli, при этом убираем gzip, больше он нам не нужен.

brotli on;

brotli_static on;

brotli_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

После этого перезагружаем nginx — и всё готово!

0
14 комментариев
Написать комментарий...
Andrey Smolnikov

написали бы хоть кратко за счет чего улучшение 

Ответить
Развернуть ветку
Letsrock Pro
Автор

Добрый день!
В первом абзаце указано — за счет кэширования данных :)

Ответить
Развернуть ветку
Andrey Smolnikov

Там же в первом абзаце написано, что модуль за сжатие отвечает, а не за кэширование.

Характеристика в 35 пунктов пейджспид ни о чем не говорит. Что и как стало быстрее? 

Ответить
Развернуть ветку
Evgeniy Efimchenko

Рекомендуется оставить gzip включенным после установки модуля сжатия данных Brotli.Хотя модули сжатия данных могут сжимать данные более эффективно, чем gzip, некоторые браузеры и клиенты могут не поддерживать эти модули. Поэтому, оставляя gzip включенным, вы можете обеспечить совместимость с более широким диапазоном клиентов и браузеров.Кроме того, gzip может быть полезен для сжатия небольших файлов, которые могут не оправдывать использование модулей сжатия данных. Например, для сжатия файлов CSS и JavaScript gzip может быть более эффективным, чем модули сжатия данных.Таким образом, рекомендуется оставить gzip включенным после установки модуля сжатия данных, чтобы обеспечить совместимость с более широким диапазоном клиентов и браузеров, а также для сжатия небольших файлов.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Evgeniy Efimchenko

Браузер если поддерживает то сервак сам отдаст в нужном сжатии.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Evgeniy Efimchenko

Да, всегда два. В чём проблема настроить и потестировать? :-)

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Andrey Smolnikov

https://docs.nginx.com/nginx/admin-guide/dynamic-modules/brotli/ и смысл после этого самому что-то пересобирать?

Ответить
Развернуть ветку
Angel Vivaldi

вас не смутила приписочка plus? (((: а ценник вас не смущает?

Ответить
Развернуть ветку
Andrey Smolnikov

Признаюсь, вначале не заметил, думал можно без коммерческой версии поставить. Потом когда пробовать начал запустить, увидел, что нужно покупать.

Но это не отменяет, что они в статье нормально на вопрос не ответили, а начали считать гугл попугаями улучшение.

Вот внедрение webp например реально чуть ли не в 5-10.. раз (можно выбрать какое вам качество надо) может объем изображений уменьшить и улучшить скорость загрузки. А тут хоть бы показали на сколько запрос стал быстрее или меньше.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
11 комментариев
Раскрывать всегда