Стандартным методом установки софта в Linux сегодня является использование бинарных пакетов. В некоторых средах используются готовые образы контейнеров. Однако, умение собирать Angie из исходных кодов открывает широкие дополнительные возможности. Погрузимся в этот непростой процесс и обсудим, зачем может пригодиться сборка из исходников. Читать далее
Стандартным методом установки софта в Linux сегодня является использование бинарных пакетов. В некоторых средах используются готовые образы контейнеров. Однако, умение собирать Angie из исходных кодов открывает широкие дополнительные возможности. Погрузимся в этот непростой процесс и обсудим, зачем может пригодиться сборка из исходников.
Настройка location в Angie. Разделение динамических и статических запросов.
Перенаправления в Angie: return, rewrite и примеры их применения.
Сжатие текста в Angie: статика, динамика, производительность.
Сборка Angie из исходных кодов.
Для вашего удобства подготовлена видеоверсия этой статьи, доступна на Rutube, VKVideo и YouTube.
Процесс сборки начинается с получения исходных кодов. Проще всего получить архив с исходниками Angie с официального сайта. Там есть архивы для релизных версий сервера. Такой вариант рекомендован для промышленного использования. Например, для версии 1.11.8:
curl -O "https://download.angie.software/files/angie-1.11.8.tar.gz"Далее любым удобным способом распаковываем архив, например:
tar -xpf angie-1.11.8.tar.gzВторой вариант — получить новейший код из репозитория:
git clone http://git.angie.software/web-server/angie.gitТак мы получим новейшую версию в разработке. Такой вариант будет полезен для изучения новых возможностей, проведения экспериментов и участия в разработке проекта.
Теперь у нас есть копия исходных кодов сервера, включая штатные модули. Можно переходить к конфигурации и установке зависимостей.
Перед сборкой необходимо собрать информацию о системе и указать нужные нам параметры. Для этих целей в корне дерева исходных кодов есть скрипт configure. Через параметры вызова configure можно задавать целевые настройки сервера, комплектацию сборки (модули), пути поиска зависимостей и размещения служебных файлов. Полный список параметров очень обширный и приведён на странице документации по сборке. Для упрощения задачи подбора этих параметров, можно позаимствовать их из готового пакета с Angie. Достаточно установить его в систему (целевую или похожую по ветке дистрибутива) и выполнить команду angie ‑V, параметры будут указаны в строке configure arguments:
configure arguments: --prefix=/etc/angie --conf-path=/etc/angie/angie.conf --error-log-path=/var/log/angie/error.log --http-log-path=/var/log/angie/access.log --lock-path=/run/angie.lock --modules-path=/usr/lib/angie/modules --pid-path=/run/angie.pid --sbin-path=/usr/sbin/angie --http-acme-client-path=/var/lib/angie/acme --http-client-body-temp-path=/var/cache/angie/client_temp --http-fastcgi-temp-path=/var/cache/angie/fastcgi_temp --http-proxy-temp-path=/var/cache/angie/proxy_temp --http-scgi-temp-path=/var/cache/angie/scgi_temp --http-uwsgi-temp-path=/var/cache/angie/uwsgi_temp --user=angie --group=angie --with-file-aio --with-http_acme_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_acme_module --with-stream_mqtt_preread_module --with-stream_rdp_preread_module --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --feature-cache=../angie-feature-cache --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,--package-metadata=%7B%22type%22:%22deb%22%2C%22os%22:%22ubuntu%22%2C%22name%22:%22angie%22%2C%22version%22:%221.11.8-1~resolute%22%2C%22architecture%22:%22amd64%22%7D -flto=auto -ffat-lto-objects -Wl,-z,relro -Wl,-z,now'
На основе этих параметров можно формировать нужные варианты кастомных сборок. При этом большинство путей и настроек будет совпадать с официальной сборкой в пакете, что сильно упрощает переход на кастомную версию Angie.
Другой вариант посмотреть параметры — запустить временный контейнер и получить параметры из него:
docker run -it --pull always --rm docker.angie.software/angie angie -VВажно, что нужно учитывать базовый дистрибутив образа контейнера.
Итак, у нас есть базовый набор параметров для запуска скрипта configure. Здесь начинается следующий этап: работа с зависимостями.
Зависимости это как правило библиотеки или другие системные компоненты, которые требуются для сборки веб‑сервера. Также необходимо обеспечить наличие инструментов сборки. Наличие зависимостей проверяется на этапе выполнения скрипта configure. Если запустить скрипт на чистой системе, то сразу получим ошибку при поиска C‑компилятора.
./configure ...
checking for OS
+ Linux 7.0.0-22-generic x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not foundКак правило, инструменты сборки не установлены по умолчанию. Чтобы установить необходимые компоненты, в Ubuntu удобно воспользоваться мета‑пакетом build‑essential.
apt install build-essentialПосле установки пакета запускаем скрипт configure снова и видим ту же ошибку. Установили не тот пакет? Нет, дело в параметре --feature-cache=../angie-feature-cache. Он включает кэш для определения системных компонентов и зависимостей. Основная задача — ускорение сборки множества пакетов сторонних модулей для официального репозитория. Поэтому повторный поиск компилятора не проводился и мы получаем ошибку наличия из кэша. Для большинства случаев кэш лучше вообще отключить (убрать параметр feature-cache), тогда такой проблемы не будет. Если вы всё-так используете его, то очищаем кэш и запускаем скрипт снова:
rm -rf ../angie-feature-cache/
./configure ...На этот раз получаем больше успешных проверок, но ошибка наверняка появится. Дело в том, что для сборки необходимы различные библиотеки, причём установленные в версии для разработки (суффикс ‑dev для Debian‑дистрибутивов или ‑devel для RedHat). Список библиотек зависит от набора модулей при сборке. В нашем случае (Ubuntu 26.04) при попытке сборки с параметрами из пакета не хватает библиотеки PCRE (требуется для модуля rewrite). Ошибка выглядит так:
...
checking for PCRE2 library ... not found
checking for PCRE library ... not found
checking for PCRE library in /usr/local/ ... not found
checking for PCRE library in /usr/include/pcre/ ... not found
checking for PCRE library in /usr/pkg/ ... not found
checking for PCRE library in /opt/local/ ... not found
checking for PCRE library in /opt/homebrew/ ... not found
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with Angie by using --with-pcre=<path> option.Чтобы решить эту проблему есть два пути: установить пакет ‑dev‑версии библиотеки в систему или собрать библиотеку статически вместе с Angie из исходных кодов (для этого указать параметр (--with‑pcre=путь к исходникам библиотеки).
Здесь стоит сделать лирическое отступление на тему динамической и статической линковки. Динамическая линковка означает указание ссылок на пути внешних библиотек и использование их совместно с другим софтом. Для такого метода библиотека должна быть установлена в систему и находиться в одной из стандартных директорий (/usr/lib, /usr/lib64 и так далее).
Статическая линковка подразумевает интеграцию библиотек в исполняемый файл angie. Сборка кода библиотеки происходит во время сборки сервера и мы перестаём зависеть от системных библиотек. В результате исполняемый файл будет больше по размеру, но иметь меньше внешних зависимостей.
Проверить динамическую линковку исполняемого файла можно с помощью утилиты ldd:
ldd /usr/sbin/angie-nodebug
linux-vdso.so.1 (0x000075bf8008d000)
libcrypt.so.1 => /usr/lib/x86_64-linux-gnu/libcrypt.so.1 (0x000075bf8003b000)
libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x000075bf7ff15000)
libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x000075bf7fb54000)
libssl.so.3 => /usr/lib/x86_64-linux-gnu/libssl.so.3 (0x000075bf7fa46000)
libcrypto.so.3 => /usr/lib/x86_64-linux-gnu/libcrypto.so.3 (0x000075bf7f400000)
libz.so.1 => /usr/lib/x86_64-linux-gnu/libz.so.1 (0x000075bf7fef5000)
libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x000075bf7f000000)
/lib64/ld-linux-x86-64.so.2 (0x000075bf8008f000)
libzstd.so.1 => /usr/lib/x86_64-linux-gnu/libzstd.so.1 (0x000075bf7f33d000)Команда показала список библиотек, которые может использовать Angie, а также их пути в файловой системе. Для сравнения вывод этой же команды на бинарнике angie со статической компоновкой библиотеки OpenSSL:
ldd /usr/sbin/angie-401
linux-vdso.so.1 (0x000075f782b46000)
libcrypt.so.1 => /usr/lib/x86_64-linux-gnu/libcrypt.so.1 (0x000075f782af4000)
libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x000075f7829ce000)
libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x000075f781f54000)
libz.so.1 => /usr/lib/x86_64-linux-gnu/libz.so.1 (0x000075f7829b0000)
libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x000075f781c00000)
/lib64/ld-linux-x86-64.so.2 (0x000075f782b48000)В этом варианте нет библиотек libssl.so.3 и libcrypto.so.3 — они входят в сам исполняемый файл.
По аналогии с библиотеками в Angie есть возможность статической и динамической линковки модулей сервера. При динамической линковке модуль можно подгружать директивой load_module, при статической — он всегда загружен и его код включен в исполняемый файл Angie. Для модулей, которые поддерживают динамическую линковку используется параметр скрипта конфигурации со значением dynamic, например:
--with-http_image_filter_module=dynamicПреимуществом динамической линковки является возможность переноса файла модуля (.so) на другие совместимые системы и дополнение функциональности Angie без полной пересборки сервера.
Возвращаемся к ошибке при конфигурации:
./configure: error: the HTTP rewrite module requires the PCRE library.Самым простым решение будет установить пакет в этой библиоткой:
apt install libpcre2-devПосле этого на забудьте почистить (если используете) директорию angie‑feature‑cache. Однако, после удовлетворённой зависимости будет появляться новая ошибка об отсутствии библиотеки, пока вы не установите все необходимые. Процесс не самый быстрый: каждый раз нужно будет искать нужно имя пакета, чистить кэши и запускать скрипт конфигурации.
Есть более удобный способ установить зависимости (по крайней мере те, которые нужны для стандартной сборки). Для этого нужно подключить репозиторий пакетов с исходным кодом (в нашем случае deb‑src) помимо обычного репозитория Angie, файл /etc/apt/sources.list.d/angie.list примет такой вид:
deb https://download.angie.software/angie/ubuntu/26.04 resolute main
deb-src https://download.angie.software/angie/ubuntu/26.04 resolute mainТеперь обновляем список пакетов и одной командой устанавливаем все зависимости для сборки:
apt update
apt build-dep angieПосле этого все библиотеки, необходимые для сборки пакета будут установлены. Конечно, если вы будете собирать дополнительные сторонние модули, могут появиться новые зависимости.
Итак, подготовка к сборке проведена, рассмотрим несколько реальных примеров сборки кастомных версий Angie.
Стандартные пакеты Angie из фирменного репозитория использует динамическую линковку для системной библиотеки OpenSSL. Самый простой способ собрать Angie c другой библиотекой: статическая линковка на OpenSSL. Нам потребуется скачать исходный код библиотеки с официального сайта (в примере используется OpenSSL 4.0.1) и распаковать в директорию рядом с исходниками Angie. Учитывайте, что текущая версия Angie может быть несовместима с выбранной вами версией OpenSSL. Сообщения о работе над совместимостью с OpenSSL обычно публикуются в списке изменений сервера.
wget https://github.com/openssl/openssl/releases/download/openssl-4.0.1/openssl-4.0.1.tar.gz
tar -xpf openssl-4.0.1.tar.gz Для статической линковки достаточно добавить для скрипта configure параметр ‑-with‑openssl=path с путём к исходниками OpenSSL.
Если скрипт configure выполнен успешно, запускаем сборку (параметр ‑j указывает количество потоков для утилизации нескольких процессоров):
make -j4Результат сборки будет в директории ./objs, в том числе сам исполняемый файл angie.
Более сложный сценарий для использования одного из форков OpenSSL — AWS‑LC. Процесс сборки начинается с подготовки и сборки самой библиотеки, а затем она указывается в скрипте конфигурации. Будем использовать версию AWS‑LC 5.0.0 из официального github‑репозитория:
wget https://github.com/aws/aws-lc/archive/refs/tags/v5.0.0.tar.gz
tar -xpf v5.0.0.tar.gzУстанавливаем инструменты для сборки библиотеки:
apt install golang-go cmake ninja-buildПереходим в каталог с библиотекой и собираем её:
cd aws-lc-5.0.0/
cmake -GNinja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C buildПосле успешной сборки возвращаемся в каталог с исходниками Angie и добавляем следующие параметры скрипта configure.
--with-cc-opt='-fPIC -I ../aws-lc-5.0.0/include' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,-rpath -L ../aws-lc-5.0.0/build/ssl -L ../aws-lc-5.0.0/build/crypto -lssl -lcrypto -lstdc++'
Обратите внимание, что опция ‑-with‑openssl здесь не используется. Вместо неё мы указываем параметры компилятора (‑-with‑cc‑opt) и линковщика (‑-with‑ld‑opt), в которых содержатся пути поиска библиотеки AWS‑LC.
После сборки (make) проверяем исполняемый файл:
./objs/angie -V
Angie version: Angie/1.11.7
nginx version: nginx/1.29.3
built on Thu, 18 Jun 2026 12:59:32 GMT
built by gcc 15.2.0 (Ubuntu 15.2.0-16ubuntu1)
built with OpenSSL 1.1.1 (compatible; AWS-LC 5.0.0) (running with AWS-LC 5.0.0)Использование библиотеки AWS‑LC отражено в выводе команды.
Для примера сборки стороннего модуля будем использовать проект ngx_brotli — модули для поддержки Brotli-компрессии. Процесс сборки похож на пример с библиотекой AWS-LC.
Получаем исходный код модуля и собираем нужные компоненты по инструкции из README.md:
git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
cd ngx_brotli/deps/brotli
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
cmake --build . --config Release --target brotlienc
cd ../../../..Теперь добавляем параметр для скрипта конфигурации: --add-module=../ngx_brotli. Такой вариант соответствует статической линковке модуля. Для динамической линковки используем параметр --add-dynamic-module=../ngx_brotli. После успешного выполнения скрипта конфигурации запускаем сборку (make).
Если сборка успешно завершена, пора переходить к установке.
Управление программным обеспечением, собранном из исходных кодов, не самое приятное занятие. После установки файлов (копирования в различные директории файловой системы) в системе не остаётся системной информации о версии софта, всех его файлах и других метаданных, содержащихся в пакете. Обновление и удаление значительно усложняется.
Тем не менее, базовую установку Angie после компиляции можно выполнить одной командой:
make installНужно учитывать, что в версии, собранной из исходных кодов не будет некоторых привычных элементов пакета. Например, юнит systemd для сервиса нужно будет создать вручную. Одним из вариантом может быть установка Angie из пакета и далее установка кастомной версии поверх. При этом нужно зафиксировать версию пакета с Angie, чтобы не затереть кастомную установку:
apt-mark hold angieВторой вариант установки задействует утилиту checkinstall. По сути она выполняет те же действия, что и make install, но при этом упаковывает файлы в .deb‑пакет, который можно установить на другой системе.
checkinstall --pkgname=angie-custom --pkgversion=1.11.8 --nodocТакой вариант позволяет получить в результате пакет, но он всё ещё будет неполноценным. Установка полученного пакета также может производиться поверх обычного пакета Angie с последующей фиксацией версии.
Чтобы получить полноценный независимый пакет можно использовать пакет с исходниками Angie (из репозитория deb‑src), модифицировать его конфигурацию и собрать штатными средствами. Важно учитывать, что вместе со штатным пакетом Angie собирается большое количество сторонних модулей.
Подготовка: скачиваем пакеты с исходниками и устанавливаем зависимости:
apt source angie
apt build-dep angieМодифицируем параметры конфигурации в файле ./debian/rules.
Запускаем сборку пакета:
dpkg-buildpackage -bТакой подход более корректен, так как мы получаем самостоятельный набор пакетов со всеми необходимыми компонентами.
В этой статье мы разобрали некоторые аспекты сборки сервера Angie из исходных кодов. Процесс не самый простой, но в некоторых случаях нет другого выбора. С другой стороны, умение сборки Angie открывает широкое поле для экспериментов. Команды и параметры приведены для актуальных на момент написания версий софта. Они могут измениться в будущем. Над совместимостью различных компонентов работает команда разработчиков, следите за списком изменений.
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Анатомия процесса загрузки Linux — от инициализации ядра до systemd | 0 | 5 | 24-06-2026 |
| 2 | С нуля до Junior DevOps в 2026 году. Часть 3. Git и GitHub | 0 | 6 | 12-07-2026 |
| 3 | Многоэтапные сборки в Docker: как уменьшить образ с 1,2 ГБ до 50 МБ | 5 | 8 | 28-06-2026 |
| 4 | Загружаем bitstream из Linux через FPGA Manager на Zynq-7000 | 0 | 8 | 28-06-2026 |
| 5 | 6 pro-фишек FluxCD. Выжимаем все соки из GitOps | 2 | 6 | 06-07-2026 |
| 6 | Настройка AI-агентов для ускорения бизнес процессов компании | 0 | 7 | 03-07-2026 |
| 7 | Как я писал диплом в LaTeX: Docker, CI/CD, Latexmk, Mermaid, и многое другое | 5 | 8 | 28-06-2026 |
| 8 | Основы вёрстки для дизайнера. Часть 1. Введение: как дизайн превращается в живой сайт | 5 | 7 | 07-07-2026 |
| 9 | Когда может пригодиться экзотика в ООП: миксины/трейты/аспекты | 0 | 5 | 08-07-2026 |
| 10 | Зараженные ассеты на маркетплейсах | -3 | 6 | 23-06-2026 |