Гид по технологиям

Установка Nginx из исходников на Fedora 29

• 6 min read • DevOps • Обновлено 24 Nov 2025
Установка Nginx из исходников на Fedora 29
Установка Nginx из исходников на Fedora 29

Короткое описание

Nginx (произносится как “engine x”) — это лёгкий и высокопроизводительный веб‑сервер с модульной архитектурой. Он может работать как HTTP/HTTPS сервер, обратный прокси, почтовый прокси, балансировщик нагрузки, TLS‑терминатор и кэш‑сервер. Модули Nginx бывают встроенные (core) и внешние (third‑party). Сборка из исходников даёт гибкость: вы выбираете точные модули и версию OpenSSL, с которой будет скомпилирован бинарник.

В этой инструкции мы собираем open source Nginx mainline (в примере 1.15.8). Процесс для stable такой же — меняется только номер версии.

Что вы получите из этой инструкции

  • Пошаговая сборка Nginx с зависимостями в исходниках (OpenSSL, PCRE, Zlib)
  • Примеры конфигурации ./configure с динамическими и статическими модулями
  • Systemd‑юнит, структура каталогов, rotator логов и права доступа
  • Рекомендации по безопасности и отладке

Варианты релизов Nginx

  • Mainline — содержит последние функции и фикс‑патчи. Подходит, если вам нужны новые возможности и вы готовы тестировать.
  • Stable — более консервативен, содержит проверенные релизы. Подходит для продакшн‑систем, где критична предсказуемость.

Типы модулей

  • Core (встроенные) — разрабатываются ядром Nginx и включены в пакет.
  • Third‑party — сообщества и разработчики создают модули для расширения функционала.
  • Static vs Dynamic — статические модули встраиваются в бинарник при компиляции; динамические можно собрать отдельно и загружать через load_module в nginx.conf.

Важно: динамические модули появились в Nginx 1.9.11+ (февраль 2016). Для сборки используйте синтаксис –with-=dynamic для встроенных модулей или –add-dynamic-module=/path для внешних.

Краткий список требований

  • ОС: Fedora 29 (в примере)
  • Нерутовый пользователь с sudo
  • Компилятор: GCC (пакет “Development Tools”)
  • Библиотеки (минимум): OpenSSL/LibreSSL/BoringSSL, Zlib, PCRE
  • Дополнительно: Perl, libxslt, libxml2, LibGD, GeoIP (опционально)

Факто‑бокс

  • Минимальные обязательные библиотеки: OpenSSL, Zlib, PCRE
  • Пример версии в статье: nginx 1.15.8, OpenSSL 1.1.1a, zlib 1.2.11, pcre 8.42

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

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

cat /etc/fedora-release
# Fedora release 29 (Twenty Nine)

Установите часовой пояс:

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

Обновите систему:

sudo dnf upgrade -y

Установите базовые утилиты:

sudo dnf install -y vim curl wget tree

Сборка Nginx из исходников

  1. Установите инструменты компиляции:
sudo dnf groupinstall -y 'Development Tools'
  1. Скачайте и распакуйте исходники Nginx (mainline в примере):
wget https://nginx.org/download/nginx-1.15.8.tar.gz && tar zxvf nginx-1.15.8.tar.gz
  1. Скачайте и распакуйте обязательные зависимости в исходниках:
# PCRE version 8.42
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz && tar xzvf pcre-8.42.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar xzvf openssl-1.1.1a.tar.gz
  1. Установите опциональные зависимости (если нужны модули, зависящие от них):
sudo dnf install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel
  1. Удалите архивы, чтобы не мешались:
rm -rf *.tar.gz
  1. Перейдите в каталог исходников Nginx:
cd ~/nginx-1.15.8
  1. Для обзора структуры используйте tree:
tree -L 2 .
  1. Скопируйте man‑страницу в систему:
sudo cp ~/nginx-1.15.8/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that Man page for Nginx is working:
man nginx

Страница руководства Nginx (man)

  1. Узнайте доступные опции configure:
./configure --help
# To see want core modules can be build as dynamic run:
./configure --help | grep -F =dynamic
  1. Пример конфигурации, компиляции и установки Nginx с набором модулей (пример из статьи):
./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib64/nginx/modules \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --user=nginx \
            --group=nginx \
            --build=Fedora \
            --builddir=nginx-1.15.8 \
            --with-select_module \
            --with-poll_module \
            --with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
            --with-http_geoip_module=dynamic \
            --with-http_sub_module \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_mp4_module \
            --with-http_gunzip_module \
            --with-http_gzip_static_module \
            --with-http_auth_request_module \
            --with-http_random_index_module \
            --with-http_secure_link_module \
            --with-http_degradation_module \
            --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --with-perl_modules_path=/usr/lib64/perl5 \
            --with-perl=/usr/bin/perl \
            --http-log-path=/var/log/nginx/access.log \
            --http-client-body-temp-path=/var/cache/nginx/client_temp \
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
            --with-mail=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8.42 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1a \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install
  1. Возврат в домашний каталог и создание символьной ссылки для модулей:
cd ~
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
  1. Проверка версии и аргументов конфигурации:
sudo nginx -V
# nginx version: nginx/1.15.8 (Fedora)
# built by gcc 8.2.1 20150623 (Red Hat 8.2.1-6) (GCC)
# built with OpenSSL 1.1.1a  20 Nov 2018
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules
# . . .
# . . .
  1. Создайте системную группу и пользователя nginx:
sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx
  1. Проверка синтаксиса и создание директорий кэша:
sudo nginx -t
# Если появится ошибка о /var/cache/nginx/client_temp, создайте директории:
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*

# Повторно проверьте:
sudo nginx -t
  1. Создайте systemd‑юнит для Nginx:
sudo vim /etc/systemd/system/nginx.service

Содержимое файла (вставьте):

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

NOTE: Местоположение PID файла и бинарника может отличаться, если Nginx был собран с другими путями.

  1. Включите автозапуск и запустите сервис:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Проверка статуса автозапуска и работы:

sudo systemctl is-enabled nginx.service
# enabled

sudo systemctl status nginx.service
# или
ps aux | grep nginx
# или
curl -I 127.0.0.1

Откройте в браузере IP/домен, чтобы увидеть стартовую страницу Nginx как визуальную проверку.

Стартовая страница Nginx

  1. Удалите файлы с расширением .default в /etc/nginx:
sudo rm /etc/nginx/*.default
  1. Подсветка синтаксиса для Vim (опционально):
# Для обычного пользователя
mkdir ~/.vim/
cp -r ~/nginx-1.15.8/contrib/vim/* ~/.vim/
# Для root
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.15.8/contrib/vim/* /root/.vim/

Подсветка синтаксиса конфигураций Nginx в Vim

  1. Создайте вспомогательные каталоги и права:
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
  1. Настройте логротэйт для Nginx:
sudo vim /etc/logrotate.d/nginx

Добавьте:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 nginx adm
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
  1. Очистите загруженные исходники:
cd ~
rm -rf nginx-1.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

Поздравления — у вас установлен Nginx, собранный из исходников и скомпилированный против указанной версии OpenSSL. Это даёт контроль над наборами шифров и возможностью использовать TLS 1.3 и современные алгоритмы вроде CHACHA20_POLY1305 (если OpenSSL и конфигурация поддерживают).

Когда сборка из исходников — не лучший выбор

  • Если вам нужна быстрая установка с поддержкой автоматических обновлений — используйте пакеты dnf/apt или контейнеры.
  • Если вы не хотите заботиться об обновлениях OpenSSL — лучше использовать системные пакеты, которые обновляются через репозиторий.
  • Для лёгкой масштабируемости и однородности окружений CI/CD удобнее использовать контейнеры (Docker/OCI) с готовым образом.

Альтернативные подходы

  • Установка из репозиториев Fedora: sudo dnf install nginx
  • Использование официальных пакетов от nginx.org (rpm) для удобных обновлений
  • Docker образ nginx: быстрый запуск и консистентность среды
  • Использование управляемых балансировщиков/CDN если хотите избежать управления TLS на уровне сервера

Безопасность и рекомендованные жесткие настройки

  1. Соберите Nginx с последней стабильной OpenSSL для поддержки TLS 1.3.
  2. Отключите старые шифры и TLS 1.0/1.1 в конфигурации.
  3. Включите HSTS и Content Security Policy в нужных сайтах.
  4. Ограничьте права пользователя nginx (run as nonroot user) и примените SELinux/AppArmor, если доступно.
  5. Регулярно обновляйте OpenSSL/сборку при появлении критичных уязвимостей.

Пример безопасного набора шифров в nginx.conf:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...';
ssl_prefer_server_ciphers on;

Мини‑методология выбора модулей перед сборкой

  1. Определите требования (HTTP/2, geoip, lua, pagespeed и т.д.).
  2. Сверьте зависимости модулей и совместимость с версией Nginx.
  3. Если функционал критичен — включайте статически; если нужен гибкий lifecycle — соберите как dynamic.
  4. Тестируйте сборку в staging перед развёртыванием в production.

Чеклист принятия решения:

  • Нужен ли модуль в каждом экземпляре сервера? Если да — статический.
  • Будут ли модули обновляться отдельно? Если да — dynamic.
  • Зависит ли модуль от внешних библиотек, которые меняются часто? Если да — динамический модуль упрощает обновление.

Ролевые чеклисты

Администратор сервера:

  • Проверил зависимости и версии OpenSSL/PCRE/Zlib
  • Собрал и установил Nginx
  • Создал пользователя nginx и настроил права
  • Настроил systemd и логротацию
  • Проверил работу сервиса и безопасность

Разработчик / DevOps:

  • Протестировал модули, необходимые приложению
  • Настроил sites‑available/sites‑enabled и блокировки
  • Настроил мониторинг / метрики (stub_status или Prometheus exporter)

Быстрое руководство по отладке

  • Проверка синтаксиса: sudo nginx -t
  • Логи: /var/log/nginx/error.log и access.log
  • Процессы: ps aux | grep nginx
  • Перезапуск: sudo systemctl restart nginx
  • Переустановить модуль динамически: скопировать .so в /etc/nginx/modules, обновить nginx.conf с load_module и перезагрузить

Совместимость и миграция

  • При миграции с системного пакета на сборку из исходников проверьте, что пути в systemd и конфигурации совпадают.
  • Если у вас уже есть ssl-сертификаты, убедитесь, что права на ключи корректные и nginx может их читать.
  • При смене OpenSSL проверьте поддерживаемые шифры и обратную совместимость с клиентами.

Дерево решений для выбора способа установки

flowchart TD
    A[Нужна быстрая установка?] -->|Да| B[Использовать dnf или rpm пакет]
    A -->|Нет| C[Нужен контроль над OpenSSL/модулями?]
    C -->|Да| D[Сборка из исходников]
    C -->|Нет| B
    D --> E{Требуется консистентность окружений}
    E -->|Да| F[Использовать Docker с кастомной сборкой]
    E -->|Нет| G[Сборка на хосте и деплой]

Краткий глоссарий

  • mainline — ветка разработки с новыми фичами
  • stable — проверенная ветка с долгосрочной поддержкой
  • load_module — директива для загрузки динамических модулей
  • ./configure — скрипт подготовки сборки с опциями

Примеры шаблонов и сниппетов

  • Команда для проверки доступности HTTP:
curl -I 127.0.0.1
  • Проверка параметров сборки:
sudo nginx -V
  • Быстрая команда для удаления временных исходников:
rm -rf nginx-1.15.8/ openssl-1.1.1a/ pcre-8.42/ zlib-1.2.11/

Критерии приёмки

  • Nginx запускается без ошибок: sudo nginx -t и systemctl status nginx.service
  • Стартовая страница или тестовый сайт отвечает по HTTP
  • Логи пишутся и легко ротируются
  • Права на каталоги /var/cache/nginx корректны

Риски и рекомендации по смягчению

  • Риск: устаревший OpenSSL в системе. Мягчение: сборка с актуальной версией OpenSSL и план обновлений.
  • Риск: несовместимость модулей при обновлении. Мягчение: тестирование в staging и использование динамических модулей.
  • Риск: неправильные права на ключи TLS. Мягчение: проверка прав доступа и SELinux контекстов.

Итог

Сборка Nginx из исходников даёт максимальную гибкость в выборе модулей и версии криптопакета. Это полезно, если вам нужна поддержка новых протоколов или конкретных функций. Если же вы предпочитаете простоту и регулярные обновления через пакетный менеджер, используйте dnf/rpm или контейнеры. Важно тестировать сборку и иметь процесс обновления безопасности.

Короткое резюме:

  • Сборка из исходников: гибкость и контроль.
  • Пакеты/контейнеры: простота и автоматические обновления.
  • Тестируйте и следите за безопасностью.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро