Установка сторонних модулей#
Помимо собственных динамических модулей для
Angie и Angie PRO,
мы собираем и публикуем в нашем репозитории
пакеты для ряда популярных сторонних nginx-совместимых модулей,
разработанных за пределами нашей компании. Пакеты сторонних модулей устанавливаются из нашего репозитория так же,
как наши собственные пакеты: Чтобы использовать установленный модуль в конфигурации,
загрузите его с помощью директивы load_module в контексте Совет Имена пакетов и самих модулей в конфигурации имеют следующие префиксы: Angie: Angie PRO: Примечание Мы не проверяем исходный код этих модулей
и не отвечаем за последствия их установки;
пакеты собираются на основе многочисленных запросов
исключительно для удобства пользователей. Модуль Версия Пакеты Если нужного модуля нет в перечне, его можно собрать самостоятельно для Angie
или Angie PRO, установленного из наших пакетов. Angie и Angie PRO
загружают динамический модуль, только если тот собран: для того же продукта — Angie или Angie PRO; для той же самой версии; с совпадающими параметрами сборки. Наши пакеты собираются без параметра В шагах в качестве примера собирается ngx-fancyindex — произвольно выбранный
модуль, которого нет в нашем перечне. Другие модули собираются теми же
шагами со своим адресом репозитория и своими именами модуля, а также с
библиотеками или модулями, которых требует их собственная инструкция по
сборке. Мы не проверяем код модулей, собранных таким образом, и не отвечаем за
последствия их загрузки. Установите компилятор, библиотеки, с которыми собран Angie, и инструменты
для получения исходного кода. В Debian и Ubuntu: В RHEL, Fedora и производных установите также пакет
Только для Angie PRO: установите В RHEL, Fedora и производных: Скачайте и распакуйте исходный код Angie установленной версии. Для
Angie PRO это исходный код Angie той же версии; файлы Angie PRO добавляются
в него на шаге 6. Angie PRO выводит версию с суффиксом Склонируйте репозиторий модуля в каталог рядом с деревом исходников Angie;
в примере это ngx-fancyindex: Сконфигурируйте сборку с параметрами установленного Angie или Angie PRO,
добавив к ним модуль. В RHEL, Fedora и производных сначала задайте
стандартные флаги компилятора дистрибутива — с ними собраны и наши пакеты,
но Затем в любом дистрибутиве выполните: eval заставляет оболочку учесть кавычки в выведенных параметрах,
чтобы значения с пробелами не распались на части. Вторая команда
sed убирает параметр Если ./configure завершится с ошибкой, устраните причину
(например, установите недостающую библиотеку) и перед повторным запуском
удалите каталог В RHEL, Fedora и производных ошибки из-за пропущенного шага на него не
указывают: без Только для Angie PRO: замените заголовочные файлы и конфигурацию сборки в
дереве исходного кода файлами Angie PRO: Пакет повторяет структуру каталога Соберите модуль: Результат — файл Установите модуль: И в Angie, и в Angie PRO модуль подключается директивой load_module
в контексте Если модуль не соответствует установленному Angie или Angie PRO,
Каждая новая версия Angie или Angie PRO требует пересборки модуля: сборку
для прежней версии она отклоняет с ошибкой версии. Если сервис работает во
время обновления пакета до новой версии, пакет пытается переключить его на
новый исполняемый файл на лету. С модулем, собранным для прежней версии, новый
исполняемый файл отвергает конфигурацию, поэтому переключения не происходит:
пакет выводит сообщение После обновления пересоберите и переустановите модуль, используя его исходный
код из первой сборки: повторите шаг 3 и шаги с 5 по 8, начиная с каталога,
где при первой сборке выполнялся шаг 3; для Angie PRO сначала повторите
шаг 2. На последнем шаге модуль устанавливается командой install,
а не cp: install записывает новый файл, а не
перезаписывает тот, что уже загружен работающим сервисом. Затем перезапустите
сервис, чтобы новый исполняемый файл запустился с пересобранным модулем: Перезагрузки конфигурации здесь недостаточно: она проходит успешно, но
работающий исполняемый файл продолжает использовать уже загруженную сборку
модуля. Чтобы без перерыва в обслуживании переключиться на новый исполняемый
файл и пересобранный модуль, вместо перезапуска выполните обновление
исполняемого файла на лету.Установка и настройка#
main:load_module modules/<имя модуля>.so;
angie-module-<имя>;angie-pro-module-<имя>.Перечень пакетов#
angie-module-auth-jwtangie-pro-module-auth-jwtangie-module-auth-ldapangie-pro-module-auth-ldapangie-module-auth-pamangie-pro-module-auth-pamangie-module-auth-spnegoangie-pro-module-auth-spnegoangie-module-auth-totpangie-pro-module-auth-totpangie-module-brotliangie-pro-module-brotliangie-module-cache-purgeangie-pro-module-cache-purgeangie-module-cgiangie-pro-module-cgiangie-module-combined-upstreamsangie-pro-module-combined-upstreamsangie-module-dav-extangie-pro-module-dav-extangie-module-dynamic-limit-reqangie-pro-module-dynamic-limit-reqangie-module-echoangie-pro-module-echoangie-module-enhanced-memcachedangie-pro-module-enhanced-memcachedangie-module-evalangie-pro-module-evalangie-module-geoip2angie-pro-module-geoip2angie-module-headers-moreangie-pro-module-headers-moreangie-module-http-auth-radiusangie-pro-module-http-auth-radiusangie-module-jwtangie-pro-module-jwtangie-module-keyvalangie-pro-module-keyvalangie-module-luaangie-pro-module-luaangie-module-modsecurityangie-pro-module-modsecurityangie-module-njsangie-pro-module-njsangie-module-ndkangie-pro-module-ndkangie-module-oidcangie-pro-module-oidcangie-module-opentracingangie-pro-module-opentracingangie-module-otelangie-pro-module-otelangie-module-postgresangie-pro-module-postgresangie-module-redis2angie-pro-module-redis2angie-module-rtmpangie-pro-module-rtmpangie-module-set-miscangie-pro-module-set-miscangie-module-subsangie-pro-module-subsangie-module-testcookieangie-pro-module-testcookieangie-module-unbrotliangie-pro-module-unbrotliangie-module-unzstdangie-pro-module-unzstdangie-module-uploadangie-pro-module-uploadangie-module-vodangie-pro-module-vodangie-module-vtsangie-pro-module-vtsangie-module-weserv-imagesangie-pro-module-weserv-imagesangie-module-zipangie-pro-module-zipangie-module-zstdangie-pro-module-zstdСборка модуля для пакетной версии Angie или Angie PRO#
--with-compat, поэтому
установленные из них Angie и Angie PRO отклонят модуль, собранный с
параметрами ./configure по умолчанию или с --with-compat.
Ниже описано, как собрать модуль так, чтобы установленный из пакета Angie
или Angie PRO его загрузил. Пересобирать или заменять сам Angie или Angie PRO
при этом не нужно: пакет остается установленным, а модуль собирается отдельно
и подключается к нему. Модуль собирается в дереве исходного кода Angie той же
версии, что и установленный пакет, с параметрами сборки этого пакета.
Angie PRO поставляется только в виде пакетов, без исходного кода, но
использует ту же систему сборки, что и Angie. Модуль для Angie PRO собирается
в том же дереве исходного кода Angie с заголовочными файлами и конфигурацией
сборки Angie PRO из пакета angie-pro-headers.$ sudo apt install build-essential libpcre2-dev zlib1g-dev libssl-dev libcrypt-dev curl git
redhat-rpm-config, который содержит настройки компилятора для сборки
наших пакетов:$ sudo dnf install gcc make pcre2-devel zlib-devel openssl-devel libxcrypt-devel redhat-rpm-config git
angie-pro-headers той же версии,
что и установленный пакет angie-pro. Пакет
angie-pro-headers устанавливает заголовочные файлы и конфигурацию
сборки Angie PRO в каталог /usr/include/angie-pro/. Он берется из
того же репозитория, что и angie-pro, а его доступность
зависит от вашей лицензии. От angie-pro он
не зависит, поэтому пакетный менеджер не согласует их версии; укажите
версию явно. В Debian и Ubuntu:$ sudo apt install "angie-pro-headers=$(dpkg-query -W -f='${Version}' angie-pro)"
$ sudo dnf install "angie-pro-headers-$(rpm -q --qf '%{VERSION}-%{RELEASE}' angie-pro)"
(PRO),
который первая команда отбрасывает:$ VERSION=$(sudo angie -v 2>&1 | sed -n 's|^Angie version: Angie/\([0-9.]*\).*|\1|p')
$ echo "$VERSION"
1.12.3
$ curl -fsSO "https://download.angie.software/files/angie-$VERSION.tar.gz"
$ tar -xzf "angie-$VERSION.tar.gz"
$ git clone https://github.com/aperezdc/ngx-fancyindex
angie -V их не выводит:$ export CFLAGS="$(rpm --eval '%{optflags}')"
$ cd "angie-$VERSION"
$ eval ./configure $(sudo angie -V 2>&1 | sed -n 's/^configure arguments: //p' | sed 's/ --with-license//') \
--add-dynamic-module=../ngx-fancyindex
--with-license, с которым
собраны некоторые пакеты Angie PRO: ./configure Angie этого
параметра не знает, а сам параметр влияет только на исполняемый файл
Angie PRO, но не на модуль. В параметрах Angie его нет.../angie-feature-cache: параметры пакета включают
--feature-cache=../angie-feature-cache, поэтому
./configure сохраняет там неудачные проверки и при следующем
запуске сообщает о них как using cached проверка ... not found.redhat-rpm-config ./configure
останавливается с сообщением
the invalid value in --with-ld-opt="значение", а без экспорта
CFLAGS — с сообщением C99 variadic macros support is not found.$ cp -r /usr/include/angie-pro/. src/
$ cp src/objs/* objs/
src, поэтому первая команда
заменяет заголовочные файлы. В подкаталоге objs пакета — после
копирования это src/objs — лежит конфигурация сборки Angie PRO
(файлы ngx_auto_config.h и ngx_auto_headers.h); вторая
команда копирует эти файлы в каталог objs, созданный
./configure. Нужны обе команды. Заголовочные файлы дают модулю
структуры и подпись продукта Angie PRO. Конфигурация сборки задает
параметры, с которыми компилируется модуль: у Angie PRO есть параметры,
которых ./configure Angie не знает, и модуль, скомпилированный
с конфигурацией Angie, не совпал бы со структурами Angie PRO по
расположению полей.$ make modules
objs/ngx_http_fancyindex_module.so.$ sudo install -m 644 objs/ngx_http_fancyindex_module.so /etc/angie/modules/
Подключение и обновление#
main; подключив его, проверьте и перезагрузите
конфигурацию:load_module modules/ngx_http_fancyindex_module.so;
$ sudo angie -t && sudo systemctl reload angie
angie -t завершится ошибкой с сообщением, которое указывает на
несоответствие:module "файл" was built for "Angie" but you are running "Angie PRO"
или то же с переставленными названиями продуктов — модуль собран для другого
продукта;module "файл" version версия_модуля instead of версия_Angie —
модуль собран для другой версии; каждая версия выводится одним целым числом,
в котором младшая версия и номер исправления дополнены нулями до трех цифр;module "файл" is not binary compatible — модуль собран с другими
параметрами сборки.Binary upgrade failed, а работу продолжает
прежний исполняемый файл.$ sudo angie -t && sudo systemctl restart angie