Nginx + Brotli компрессия

Brotli  алгоритм сжатия данных с открытым исходным кодом,
разработанный Юрки Алакуйяла (фин. Jyrki Alakuijala)
и Золтаном Сабадка.

По сравнению с классическим алгоритмом deflate
(середина 1990-х, ZIP, gzip), brotli, как правило, достигает
на 20 % более высокую степень сжатия для текстовых файлов,
сохраняя сходную скорость сжатия и распаковки. Сжатые при
помощи brotli потоки получили тип кодирования br.

Было бы не плохо использовать этот алгоритм для ускорения отдачи контента своего сайта. Не находите? Давайте сделаем это.

Для начала переходим в каталог /tmp:

cd /tmp

Ставим все, что нам понадобится для сборки:

apt install build-essential git wget libssl-dev libpcre3-dev \
zlib1g-dev libxml2-dev libxslt-dev libgd-dev libgeoip-dev \
libperl-dev -y

Теперь клонируем репозиторий с исходниками модуля Brotli от компании Google и скачиваем необходимые зависимости:

git clone https://github.com/google/ngx_brotli
cd /tmp/ngx_brotli && git submodule update --init

Теперь очередь исходных кодов Nginx:

cd /tmp
wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar -vxf nginx-1.16.0.tar.gz
cd ./nginx-1.16.0

Конфигурируем сборку:

./configure --prefix=/etc/nginx \
   --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules \
   --conf-path=/etc/nginx/nginx.conf \
   --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock \
   --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
   --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
   --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module \
   --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module \
   --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module \
   --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic \
   --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module \
   --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module \
   --add-module=/tmp/ngx_brotli \
   --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' \
   --with-ld-opt='-Wl,-z,relro -Wl,--as-needed'

Обратите внимание на --add-module=/tmp/ngx_brotli - это и есть строка добавления модуля в Nginx.

Собираем и устанавливаем:

make && make install

В конфиг Nginx добавляем строки:

    brotli on;
    brotli_comp_level 6;
    brotli_static on;
    brotli_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml;

Все. После этого у вас сервер будет уметь сжимать данные Brotli алгоритмом.

Подробности конфигурации смотрим на GitHub.



Комментарии: