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.
Комментарии: