Thank you for reading this post, don't forget to subscribe!
Оригинал статьи:
Установка и подключение модуля компрессии Brotli для NGINX в Centos 7
Brotli — это новый алгоритм сжатия, который теперь широко поддерживается во многих браузерах. Метод сжатия brotli основан на современном варианте алгоритма LZ77.
По сравнению с классическим алгоритмом deflate (середина 1990-х, ZIP, gzip), brotli, как правило, достигает на 20% более высокую степень сжатия для текстовых файлов, сохраняя сходную скорость сжатия и распаковки.
Добавим репозиторий GetPageSpeed
1 |
[root@localhost]# yum -y install https://extras.getpagespeed.com/release-el7-latest.rpm |
Установим модуль
1 |
[root@localhost]# yum -y install nginx-module-nbr |
Откроем основной конфиг NGINX и подключим модуль
1 2 3 4 5 6 7 |
[root@localhost]# nano /etc/nginx/nginx.conf ... # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; load_module "modules/ngx_http_brotli_filter_module.so"; load_module "modules/ngx_http_brotli_static_module.so"; ... |
Подключим Brotli компрессию во всех наших сайтах, для этого создадим файл с соответствующим содержимым
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[root@localhost]# nano /etc/nginx/conf.d/brotli.conf brotli on; brotli_types text/xml image/svg+xml application/x-font-ttf image/vnd.microsoft.icon application/x-font-opentype application/json font/eot application/vnd.ms-fontobject application/javascript font/otf application/xml application/xhtml+xml text/javascript application/x-javascript text/plain application/x-font-truetype application/xml+rss image/x-icon font/opentype text/css image/x-win-bitmap; brotli_comp_level 4; |
[/codesyntax]
Проверяем конфигурацию NGINX на ошибки и перезагружаем его
1 2 3 4 |
[root@localhost]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@localhost]# systemctl restart nginx |
Проверяем, подключилось ли сжатие Brotli на сайте
1 2 3 |
[root@localhost]# curl -IL https://test.ru -H "Accept-Encoding: br" ... Content-Encoding: br |
Установка модуля Brotli из исходников
После установки Nginx нам нужно собрать модуль Brotli (ngx_brotli) как динамический модуль Nginx. Начиная с версии 1.11.5 Nginx, можно скомпилировать отдельные динамические модули без компиляции полного программного обеспечения Nginx
Скачиваем исходники nginx и распаковываем
1 2 |
$ wget https://nginx.org/download/nginx-1.18.0.tar.gz $ tar zxvf nginx-1.18.0.tar.gz |
Важно, чтобы номера версий Nginx и версия исходников Nginx совпадали. Если вы установили Nginx из репозитория, то вы должны загрузить ту же версию исходников
Удаляем архив nginx-1.18.0.tar.gz
1 |
$ rm nginx-1.18.0.tar.gz |
Клонируем ngx_brotli из GitHub репозитория
1 2 3 4 |
$ git clone https://github.com/google/ngx_brotli.git $ cd ngx_brotli $ git submodule update --init $ cd ~ |
Переходим в каталог с исходниками Nginx
1 |
$ cd ~/nginx-1.18.0 |
Устанавливаем недостающие библиотеки
1 |
$ sudo dnf -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel |
Компилируем модуль ngx_brotli и копируем результат в директорию nginx
1 2 3 |
$ ./configure --with-compat --add-dynamic-module=../ngx_brotli $ make modules $ sudo cp objs/*.so /etc/nginx/modules |
Проверяем
1 2 3 |
$ ls /etc/nginx/modules ngx_http_brotli_filter_module.so ngx_http_brotli_static_module.so |
Выставляем права на файлы
1 |
$ sudo chmod 644 /etc/nginx/modules/*.so |
Настройка Nginx
Редактируем конфиг nginx.conf, подключаем модули
1 2 3 4 5 6 7 8 |
$ sudo nano /etc/nginx/nginx.conf […] # Load Brotli load_module modules/ngx_http_brotli_filter_module.so; load_module modules/ngx_http_brotli_static_module.so; events { […] |
Проверяем
1 2 3 |
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Редактируем дефолтный конфиг web-сервера, включаем компрессию
1 2 3 4 5 6 7 |
$ sudo nano /etc/nginx/conf.d/default.conf […] brotli on; brotli_static on; brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json; brotli_comp_level 4; } |
Проверяем
1 2 3 |
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Перезагружаем Nginx
1 |
$ sudo systemctl reload nginx.service |
Настройка Firewall
Открываем 80 порт
1 2 |
$ sudo firewall-cmd --zone=public --add-service=http --permanent $ sudo firewall-cmd --reload |