Как добавить поддержку сжатия Brotli в Nginx в Debian 10
Это руководство существует для этих версий ОС
- Debian 10 (Buster)
- Debian 9 (Stretch)
На этой странице
- Требования
- Начальные шаги
- Шаг 1. Установите Acme.sh и получите сертификат TLS от Lets Encrypt.
- Шаг 2. Установите Nginx из официального репозитория Nginx.
- Шаг 3. Загрузите и скомпилируйте исходный код Brotli.
- Шаг 4. Настройка Nginx
- Ссылки
Brotli – это универсальный алгоритм сжатия без потерь, разработанный Google в качестве альтернативы Gzip, Zopfli и Deflate, который сжимает данные с использованием комбинации современного варианта алгоритма LZ77, кодирования Хаффмана и 2nd контекстное моделирование порядка с коэффициентом сжатия, сравнимым с лучшими доступными в настоящее время методами сжатия общего назначения. Он похож по скорости на deflate, но предлагает более плотное сжатие.
Brotli имеет открытый исходный код под лицензией MIT.
У Nginx нет официальной поддержки, но есть сторонний модуль, разработанный Google, под названием ngx_brotli, который вы можете использовать для добавления поддержки Nginx.
В этом руководстве показано, как добавить поддержку Brotli на веб-сервер Nginx в системе Debian 10.
ПРИМЕЧАНИЕ. В этом руководстве \johndoe\
используется в качестве примера пользователя и \example.com
\ – в качестве примера домена. Замените их в соответствии с вашими именами.
Требования
- Сервер Debian 10 (бастер)
- Nginx версии 1.11.5 или более поздней.
- Доменное имя с настроенными записями
A
/AAAA
- TLS-сертификат
Начальные шаги
Проверьте свою версию Debian:
lsb_release -ds
# Debian GNU/Linux 10 (buster)
Настройте часовой пояс:
sudo dpkg-reconfigure tzdata
Обновите пакеты операционной системы (программное обеспечение). Это важный первый шаг, поскольку он гарантирует наличие последних обновлений и исправлений безопасности для пакетов программного обеспечения вашей операционной системы по умолчанию:
sudo apt update && sudo apt upgrade -y
Установите несколько основных пакетов, необходимых для базового администрирования операционной системы Debian:
sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https
Шаг 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.2
Получите сертификаты 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:
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s printf "deb https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/debian/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt
Проверьте версию Nginx:
sudo nginx -v
# nginx version: nginx/1.17.4
Включите и запустите службу 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.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz
ПРИМЕЧАНИЕ. Очень важно, чтобы номера версий пакета Nginx и исходного кода Nginx совпадали. Если вы установили Nginx 1.17.4 из официального репозитория Nginx, вам необходимо загрузить ту же версию исходного кода, в данном случае 1.17.4.
Удалите nginx-1.17.4.tar.gz:
rm nginx-1.17.4.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.4
Загрузите необходимые библиотеки:
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
Скомпилируйте 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 в своей системе Debian 10.
Ссылки
- https://brotli.org/
- https://github.com/google/ngx_brotli
- https://en.wikipedia.org/wiki/Бротли