Как скомпилировать 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, что гораздо более гибко, чем установка предварительно собранного двоичного файла.

Оставить комментарий

Изучение 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. Прочтите эту статью, чтобы узнать больше