Как скомпилировать Nginx из исходного кода на Debian 10

Вступление

Nginx - это веб-сервер с открытым исходным кодом, разработанный с учетом высокой степени параллелизма, который можно использовать в качестве HTTP / HTTPS-сервера, обратного прокси-сервера, почтового прокси-сервера, программного балансировщика нагрузки, терминатора TLS, сервера кэширования и многого другого!

Это очень модульная часть программного обеспечения. Даже некоторые, казалось бы, «встроенные» части программного обеспечения, такие как GZIP или SSL, фактически создаются как модули, которые можно включать и отключать во время сборки.

Он имеет основные (собственные) модули и сторонние (внешние) модули, созданные сообществом. На данный момент мы можем использовать более ста сторонних модулей.

Написанный на C, это быстрое и легкое программное обеспечение.

Установить Nginx из исходного кода относительно просто - скачайте последнюю версию исходного кода Nginx, настройте, соберите и установите его.

Вам нужно будет выбрать, загружать ли основную версию или стабильную версию, но их создание одинаково.

В этом руководстве мы скомпилируем основную версию Nginx для Debian 10 (buster). Мы будем использовать все доступные модули в версии Nginx с открытым исходным кодом.

Зачем компилировать и устанавливать Nginx из исходного кода?

Вы, вероятно, спросите, зачем один компилировать Nginx из источника, когда вы можете использовать подготовленные пакеты. Вот несколько причин, почему вы можете захотеть скомпилировать определенное программное обеспечение самостоятельно:

  • Для контроля параметров конфигурации.
  • Для установки программного обеспечения в любом месте. Вы даже можете установить несколько разных версий одного и того же программного обеспечения.
  • Для управления версией, которую вы устанавливаете. Дистрибутивы не всегда остаются в курсе последних версий всех пакетов, особенно надстроек к программным пакетам.
  • Чтобы лучше понять, как работает программное обеспечение.

Стабильная версия против основной линии

Nginx Open Source доступен в двух версиях:

  • Главная линия - включает в себя последние функции и исправления ошибок и всегда в курсе. Это надежно, но может включать в себя некоторые экспериментальные модули, а также может иметь некоторое количество новых ошибок.
  • Стабильный - не включает в себя все последние функции, но содержит исправления критических ошибок, которые всегда пер��носятся в основную версию.

Основные модули против сторонних модулей

Nginx имеет два типа модулей, которые вы можете использовать: основные модули и сторонние модули.

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

Сообщество создает сторонние модули, и вы можете использовать их для расширения функциональности. Есть много полезных сторонних модулей.

Статические модули против динамических модулей

Статические модули существуют в Nginx с самой первой версии. Динамические модули были представлены с Nginx 1.9.11+ в феврале 2016 года.

В статических модулях набор модулей, составляющих двоичный файл Nginx, фиксируется ./configureсценарием во время компиляции . Статические модули используют --with-foo_bar_moduleили --add-module=PATHсинтаксис.

Чтобы скомпилировать основной (стандартный) модуль как динамический, мы добавим =dynamic, например --with-http_image_filter_module=dynamic.

Чтобы скомпилировать сторонний модуль как динамический, мы используем --add-dynamic-module=/path/to/moduleсинтаксис, а затем загружаем их, используя load_moduleдирективу в глобальном контексте nginx.confфайла.

Требования для сборки Nginx из исходного кода

По сравнению с некоторыми другими программами UNIX / Linux, Nginx довольно легкий и не имеет большого количества библиотечных зависимостей. Конфигурация сборки по умолчанию зависит только от 3 устанавливаемых библиотек: OpenSSL / LibreSSL / BoringSSL, Zlib и PCRE.

ПРИМЕЧАНИЕ : Nginx также может быть скомпилирован с использованием криптографических библиотек LibreSSL и BoringSSL вместо OpenSSL.

Прежде чем вы начнете

Проверьте версию Debian.

lsb_release -ds
# Debian GNU/Linux 10 (buster)

Создать обычного пользователя с sudoдоступом.

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

ПРИМЕЧАНИЕ . Замените johndoeна свое имя пользователя .

Переключиться на нового пользователя.

su - johndoe

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

sudo dpkg-reconfigure tzdata

Обновите программное обеспечение вашей операционной системы.

sudo apt update && sudo apt upgrade -y

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

sudo apt install -y software-properties-common ufw

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

Nginx - это программа, написанная на C, поэтому сначала вам нужно установить инструмент для компиляции. Установить build-essential, gitи tree.

sudo apt install -y build-essential git tree

Загрузите последнюю версию основного кода исходного кода Nginx и распакуйте архив исходного кода. Исходный код Nginx распространяется в виде сжатого архива, как и большинство программ Unix и Linux.

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

Загрузите обязательный исходный код зависимостей Nginx и распакуйте его.

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.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.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz

Установите необязательные зависимости Nginx.

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

Очистить все .tar.gzфайлы. Нам они больше не нужны.

rm -rf *.tar.gz

Введите исходный каталог Nginx.

cd ~/nginx-1.17.2

Для хорошей меры перечислите каталоги и файлы, которые составляют исходный код Nginx tree.

tree -L 2 .

Скопируйте страницу руководства на /usr/share/man/man8/.

sudo cp ~/nginx-1.17.2/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, выполнив следующее.

./configure --help
# To see want core modules can be built as dynamic run:
./configure --help | grep -F =dynamic

Сконфигурируйте, скомпилируйте и установите Nginx.

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib/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=Debian \
            --builddir=nginx-1.17.2 \
            --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/share/perl/5.26.1 \
            --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.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

После компиляции перейдите в ~каталог home ( ).

cd ~

Симлинк /usr/lib/nginx/modulesна /etc/nginx/modules. Это стандартное место для модулей Nginx.

sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules

Распечатайте версию Nginx, версию компилятора и настройте параметры скрипта.

sudo nginx -V

# nginx version: nginx/1.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . .
# . . .
# . . .

Создайте системную группу Nginx и пользователя.

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

Проверьте синтаксис Nginx и возможные ошибки.

sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)

# Create NGINX cache directories and set proper permissions
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/*

# Re-check syntax and potential errors. 
sudo nginx -t

Создайте файл модуля Nginx systemd.

sudo vim /etc/systemd/system/nginx.service

Заполните /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

Включите Nginx для запуска при загрузке и немедленно запустите Nginx.

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

Проверьте, будет ли Nginx автоматически запускаться после перезагрузки.

sudo systemctl is-enabled nginx.service
# enabled

Проверьте статус.

sudo systemctl status nginx.service

ПРИМЕЧАНИЕ . Чтобы убедиться, что Nginx запущен, перейдите в домен своего веб-сайта или IP-адрес в веб-браузере. Вы увидите страницу приветствия Nginx. Это показатель того, что Nginx запущен на вашем VPS.

Создайте профиль приложения UFW Nginx.

sudo vim /etc/ufw/applications.d/nginx

Скопируйте / вставьте следующее содержимое в /etc/ufw/applications.d/nginxфайл.

[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

Убедитесь, что профили приложений UFW созданы и распознаны.

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

Nginx по умолчанию создает .defaultфайлы резервных копий в /etc/nginx. Удалить .defaultфайлы из /etc/nginxкаталога.

sudo rm /etc/nginx/*.default

Поместите подсветку синтаксиса конфигурации Nginx для редактора Vim ~/.vim.

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/contrib/vim/* /root/.vim/

ПРИМЕЧАНИЕ : выполнив описанный выше шаг, вы получите красивую подсветку синтаксиса при редактировании файлов конфигурации Nginx в редакторе Vim.

Создание conf.d, snippets, sites-availableи sites-enabledкаталоги /etc/nginx.

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Измените права доступа и права владения файлами журналов Nginx.

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Создайте конфигурацию ротации журналов для 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
}

Удалить все загруженные файлы из домашнего каталога.

cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

Резюме

Вот и все. Теперь у вас установлена ​​последняя версия Nginx. Он статически скомпилирован с некоторыми важными библиотеками, такими как OpenSSL. Зачастую системная версия OpenSSL устарела. Используя этот метод установки с более новой версией OpenSSL, вы можете воспользоваться современными шифрами, такими CHACHA20_POLY1305как TLS 1.3, и протоколами, которые доступны в OpenSSL 1.1.1. Более того, компилируя свой собственный двоичный файл, вы можете адаптировать то, что обеспечит ваш Nginx, что гораздо более гибко, чем установка предварительно собранного двоичного файла.



Leave a Comment

Настройка NFS Share на Debian

Настройка NFS Share на Debian

NFS - это сетевая файловая система, которая позволяет компьютерам получать доступ к файлам через компьютерную сеть. Это руководство объясняет, как вы можете выставлять папки через NF

Как обновить CentOS 7, Ubuntu 16.04 и Debian 8

Как обновить CentOS 7, Ubuntu 16.04 и Debian 8

При настройке нового сервера Linux рекомендуется обновить ядро ​​системы и другие пакеты до последней стабильной версии. В этой статье

Использование MySQL Views в Debian 7

Использование MySQL Views в Debian 7

Введение В MySQL есть замечательная функция, известная как views. Представления хранятся запросы. Думайте о них как о псевдониме для длинного запроса. В этом руководстве

Настройка Chroot в Debian

Настройка Chroot в Debian

Эта статья научит вас, как настроить chroot-джейл в Debian. Я предполагаю, что вы используете Debian 7.x. Если вы используете Debian 6 или 8, это может сработать, но

Как установить PiVPN на Debian

Как установить PiVPN на Debian

Введение Простой способ настроить VPN-сервер в Debian - это PiVPN. PiVPN - это установщик и оболочка для OpenVPN. Это создает простые команды для вас т

Как собрать Brotli из исходного кода на Debian 9

Как собрать Brotli из исходного кода на Debian 9

Используете другую систему? Brotli - это новый метод сжатия с лучшей степенью сжатия, чем в Gzip. Его исходный код публично размещен на Github. Thi

Как установить Apache Cassandra 3.11.x на Debian 9

Как установить Apache Cassandra 3.11.x на Debian 9

Используете другую систему? Apache Cassandra - бесплатная система управления базами данных NoSQL с открытым исходным кодом, разработанная для обеспечения масштабируемости, высокой

Установите Lynis на Debian 8

Установите Lynis на Debian 8

Введение Lynis - это бесплатный инструмент для аудита системы с открытым исходным кодом, который используется многими системными администраторами для проверки целостности и защиты своих систем. я

Как установить InvoicePlane в Debian 9

Как установить InvoicePlane в Debian 9

Используете другую систему? InvoicePlane - это бесплатное приложение для выставления счетов с открытым исходным кодом. Его исходный код можно найти в этом хранилище Github. Этот гид

Как установить Backdrop CMS 1.8.0 на Debian 9 LAMP VPS

Как установить Backdrop CMS 1.8.0 на Debian 9 LAMP VPS

Использ��ете другую систему? Backdrop CMS 1.8.0 - это простая и гибкая, удобная для мобильных устройств, бесплатная система с открытым исходным кодом (CMS), которая позволяет нам

Установите Plesk на Debian 7 (Wheezy)

Установите Plesk на Debian 7 (Wheezy)

Используете другую систему? Plesk - это проприетарная панель управления веб-хостинга, которая позволяет пользователям управлять своими личными и / или клиентскими веб-сайтами, базами данных.

Как установить BookStack в Debian 9

Как установить BookStack в Debian 9

Используете другую систему? BookStack - это простая, удобная и простая в использовании платформа для организации и хранения информации. BookStack полностью бесплатен и открыт

Как установить Pagekit 1.0 CMS на Debian 9 LAMP VPS

Как установить Pagekit 1.0 CMS на Debian 9 LAMP VPS

Используете другую систему? Pagekit 1.0 CMS - это красивая, модульная, расширяемая и легкая, бесплатная и с открытым исходным кодом система управления контентом (CMS) с

Как установить Subrion 4.1 CMS на Debian 9 LAMP VPS

Как установить Subrion 4.1 CMS на Debian 9 LAMP VPS

Используете другую систему? Subrion 4.1 CMS - это мощная и гибкая система управления контентом с открытым исходным кодом (CMS), которая обеспечивает интуитивно понятный и понятный контент.

Лучшие инструменты мониторинга для Ubuntu и CentOS

Лучшие инструменты мониторинга для Ubuntu и CentOS

Введение Системы Linux поставляются с инструментами мониторинга по умолчанию, такими как top, df и du, которые помогают отслеживать процессы и дисковое пространство. Хотя часто они

Настройте сервер синхронизации Firefox на Debian 9 или Ubuntu 16.04

Настройте сервер синхронизации Firefox на Debian 9 или Ubuntu 16.04

Используете другую систему? Firefox Sync - это функция синхронизации браузера, которая позволяет вам делиться своими данными и предпочтениями (такими как закладки, история

Как установить CMS за октябрь 1.0 на Debian 9 LAMP VPS

Как установить CMS за октябрь 1.0 на Debian 9 LAMP VPS

Используете другую систему? Октябрь 1.0 CMS - это простая и надежная, бесплатная система управления контентом (CMS) с открытым исходным кодом, построенная на платформе Laravel.

Как установить X-Cart 5 на Debian 10

Как установить X-Cart 5 на Debian 10

Используете другую систему? X-Cart - чрезвычайно гибкая платформа электронной коммерции с открытым исходным кодом, обладающая множеством функций и интеграций. Исходный код X-Cart доступен

Отслеживайте состояние сервера Debian с помощью Munin

Отслеживайте состояние сервера Debian с помощью Munin

Munin - это инструмент для мониторинга процессов и ресурсов на вашем компьютере, который представляет информацию в виде графиков через веб-интерфейс. Используйте следующее

Как включить TLS 1.3 в Apache на Debian 10

Как включить TLS 1.3 в Apache на Debian 10

Используете другую систему? TLS 1.3 - это версия протокола безопасности транспортного уровня (TLS), который был опубликован в 2018 году в качестве предлагаемого стандарта в RFC 8446.

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

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

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше