Поиск по сайту:

Как включить сжатие Brotli в Nginx на CentOS 8


На этой странице

  1. Требования
  2. Начальные шаги
  3. Шаг 1. Установите Acme.sh и получите сертификат TLS от Lets Encrypt.
  4. Шаг 2. Установите Nginx из официального репозитория Nginx.
  5. Шаг 3. Загрузите и скомпилируйте исходный код Brotli.
  6. Шаг 4. Настройка Nginx
  7. Ссылки

Brotli – это универсальный алгоритм сжатия без потерь, разработанный Google в качестве альтернативы Gzip, Zopfli и Deflate, который сжимает данные с использованием комбинации современного варианта алгоритма LZ77, кодирования Хаффмана и 2nd контекстное моделирование порядка с коэффициентом сжатия, сравнимым с лучшими доступными в настоящее время методами сжатия общего назначения. Он похож по скорости на deflate, но предлагает более плотное сжатие.

Brotli имеет открытый исходный код под лицензией MIT.

У Nginx нет официальной поддержки, но есть сторонний модуль, разработанный Google, под названием ngx_brotli, который вы можете использовать для добавления поддержки Nginx.

В этом руководстве показано, как добавить поддержку Brotli на веб-сервер Nginx на сервере CentOS 8.

ПРИМЕЧАНИЕ. В этом руководстве \johndoe\ используется в качестве примера пользователя и \example.com\ – в качестве примера домена. Замените их в соответствии с вашими именами.

Требования

  • Сервер CentOS 8
  • Nginx версии 1.11.5 или более поздней.
  • Доменное имя с настроенными записями A/AAAA
  • TLS-сертификат

Начальные шаги

Проверьте свою версию CentOS:

cat /etc/centos-release
# CentOS Linux release 8.0.1905 (Core)

Настройте часовой пояс:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Обновите пакеты операционной системы (программное обеспечение). Это важный первый шаг, поскольку он гарантирует наличие последних обновлений и исправлений безопасности для пакетов программного обеспечения вашей операционной системы по умолчанию:

sudo dnf update -y

Установите несколько важных пакетов, необходимых для базового администрирования операционной системы CentOS:

sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release socat && sudo dnf groupinstall "Development Tools"

Шаг 1. Установите Acme.sh и получите сертификат TLS от Lets Encrypt.

Brotli требует, чтобы вы настроили и использовали HTTPS. В этой части мы получим доверенный сертификат от Lets Encrypt.

Загрузите и установите Acme.sh:

sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail
cd ~
source ~/.bashrc

Проверьте версию:

acme.sh --version
# v2.8.6

Получите сертификаты RSA и ECDSA для example.com:

# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail --ocsp-must-staple --keylength ec-256

После выполнения приведенных выше команд ваши сертификаты и ключи будут находиться в следующих местах:

  • RSA: /etc/letsencrypt/example.com
  • ECC/ECDSA: /etc/letsencrypt/example.com_ecc

Шаг 2. Установите Nginx из официального репозитория Nginx.

Вам нужно будет загрузить и установить последнюю версию основного Nginx из официального репозитория Nginx:

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

sudo yum install yum-utils

Чтобы настроить репозиторий yum, создайте файл с именем /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. Нам нужно использовать основные пакеты nginx. Выполните следующую команду, чтобы использовать основной источник:

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

Чтобы установить nginx, выполните следующую команду:

sudo yum install -y nginx

Проверьте версию Nginx:

sudo nginx -v
# nginx version: nginx/1.17.8

Включите и запустите службу Nginx:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Шаг 3. Загрузите и скомпилируйте исходный код Brotli.

После установки Nginx нам нужно собрать модуль Brotli (ngx_brotli) как динамический модуль Nginx. Начиная с Nginx версии 1.11.5 можно компилировать отдельные динамические модули без компиляции полного программного обеспечения Nginx. В следующих нескольких шагах мы создадим модуль Brotli как динамический без полной компиляции Nginx.

Загрузите последнюю версию основного исходного кода Nginx и извлеките его:

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

ПРИМЕЧАНИЕ. Очень важно, чтобы номера версий пакета Nginx и исходного кода Nginx совпадали. Если вы установили Nginx 1.17.8 из официального репозитория Nginx, вам необходимо загрузить ту же версию исходного кода, в данном случае 1.17.8.

Удалите nginx-1.17.8.tar.gz:

rm nginx-1.17.8.tar.gz

Клонируйте ngx_brotli с GitHub:

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

Перейдите в каталог исходного кода Nginx:

cd ~/nginx-1.17.8

Загрузите необходимые библиотеки:

sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

Скомпилируйте ngx_brotli как динамический модуль и скопируйте его в стандартный каталог для модулей Nginx, /etc/nginx/modules:

./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules

Перечислите файлы в /etc/nginx/modules, и вы увидите 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

Шаг 4 — Настройте Nginx

Мы готовы настроить поддержку Brotli в Nginx.

Запустите sudo vim /etc/nginx/nginx.conf и добавьте следующие две директивы вверху файла для загрузки новых модулей Brotli:

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Протестируйте конфигурацию:

sudo nginx -t

Создайте корневой каталог документа для example.com и создайте index.html с некоторым содержимым:

sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit

Создайте виртуальный хост для example.com:

sudo vim /etc/nginx/conf.d/example.com.conf

Заполните его следующей конфигурацией:

server {
  listen 80;
  server_name example.com; # Replace with your domain name
  return 301 https://$server_name$request_uri;
}

server {    
  listen 443 ssl http2;
  server_name example.com; # Replace with your domain name

  root /var/www/example.com; # Replace with your document root

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

  brotli on;
  brotli_static on;
  brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}

Протестируйте конфигурацию:

sudo nginx -t

Перезагрузите Nginx:

sudo systemctl reload nginx.service

Посетите свой сайт в веб-браузере и откройте сетевую вкладку инструментов разработчика. Вы увидите Content-Encoding: br в заголовках ответа. Это показатель того, что сжатие Brotli работает.

Вот и все. Вы включили сжатие Brotli в своей системе CentOS 8.

Ссылки

  • https://brotli.org/
  • https://github.com/google/ngx_brotli
  • https://en.wikipedia.org/wiki/Бротли