Пост

Включаем компрессию Brotli для Nginx в CentOS 8

Brotli - это алгоритм сжатия данных без потерь с открытым исходным кодом, разработанный компанией Google. Он предназначен для ускорения загрузки веб-страниц и обеспечивает высокую степень сжатия текстовых файлов, сохраняя сходную скорость сжатия и распаковки.

Ранее была рассмотрена статья по установки модуля компрессии Brotli для Nginx в Centos 7, но т.к. репозиторий, откуда устанавливался модуль перешел на платную основу, расмотрим установку модуля компрессии Brotli из исходников

Подготовка

Обновляемся

1
$ sudo dnf update -y

Подключаем репозиторий EPEL

1
$ sudo dnf -y install epel-release

Устанавливаем необходимые пакеты

1
$ sudo dnf -y install nano curl wget git unzip socat bash-completion socat yum-utils

Устанавливаем Development Tools

1
$ sudo dnf -y groupinstall "Development Tools"

Установка Nginx

Добавляем репозиторий Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo nano /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

По-умолчанию будет использоваться ветка nginx-stable, если надо переключиться на nginx-mainline, выполняем команду

1
$ sudo yum-config-manager --enable nginx-mainline

Устанавливаем Nginx

1
$ sudo dnf -y install nginx

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

1
2
$ nginx -v
nginx version: nginx/1.18.0

Запускаем Nginx и добавляем его в автозагрузку

1
$ sudo systemctl enable --now nginx

Установка модуля 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
$ 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

Настройка Firewall

Открываем 80 порт

1
2
$ sudo firewall-cmd --zone=public --add-service=http --permanent
$ sudo firewall-cmd --reload

Открываем в браузере IP-адрес сервера

Проверка

Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.