Частым действием при разработке или внедрению веб-приложений является установка и настройка HTTP-сервера или прокси-сервера, на роль которого отличным образом подойдет наше отечественное решение — nginx (по-русски произносится как энджи́нкс или э́нжин-и́кс).
nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике Netcraft nginx обслуживал или проксировал 22.50% самых нагруженных сайтов в октябре 2021 года. Вот некоторые примеры успешного внедрения nginx (тексты на английском языке): Dropbox, Netflix, WordPress.com, FastMail.FM.
https://nginx.org/ru/
Безусловно, его установка решается простой командой:
sudo apt install nginx
Но с какой проблемой мы сталкиваемся выбирая этот путь? Прежде, чем рассмотреть эту проблему необходимо ввести команду, которая обновляет источники для получения обновлений и установке нового программного обеспечения в вашей операционной системы:
sudo apt update
Вывод будет примерно следующий:
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://deb.debian.org/debian buster InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease
Hit:4 https://packages.beget.com/deb/production generic InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
Что нам говорят эти строки? О том, что по указанным адресам наша операционная система будет получать доступные обновления (как правило в виде исправления ошибок) и брать пакеты для установки, если требуется внедрить в ОС новое ПО.
Проблема состоит в том, что в репозитории по умолчанию находятся не всегда последняя стабильная версия софта (программного обеспечения), а намного ниже версией. И когда по условиям, например, технического задания стоит задача установить последнюю стабильную версию, то тут и возникает проблема , которую мы сейчас и порешаем.
Мы будем устанавливать nginx на Linux используя пакеты с официального сайта — nginx.org. И для этого, как вы понимаете, нам необходимо подключить и настроить официальный репозиторий пакетов nginx. После этого можно будет установить и в будущем обновлять nginx из этого репозитория.
Debian
Начнем с того, что установим пакеты, необходимые для подключения apt-репозитория:
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
Теперь нам нужно импортировать официальный ключ, используемый apt для проверки подлинности пакетов. Скачаем этот ключ. Для передачи данных воспользуемся пакетом CURL
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Убедимся, что ключ был загружен верный:
gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
Вывод команды должен содержать полный отпечаток ключа 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
uid [ unknown] nginx signing key <signing-key@nginx.com>
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <signing-key@nginx.com>
Если отпечаток отличается от вышеуказанного, удалите файл ключа.
Для подключения apt-репозитория для стабильной версии nginx, выполните следующую команду:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Если требуется использовать пакеты из основной ветки nginx, выполните следующую команду вместо предыдущей:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Для использования пакетов из официального репозитория nginx вместо распространяемых в дистрибутиве, настройте закрепление:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
После этого выполним повторение команды по обновлению источников:
sudo apt update
Вывод будет содержать добавленный новый источник.
Hit:1 http://security.debian.org/debian-security buster/updates InRelease
Hit:2 http://deb.debian.org/debian buster InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease
Hit:4 https://packages.beget.com/deb/production generic InRelease
Hit:5 http://nginx.org/packages/debian buster InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
Это значит, что все хорошо и мы готовы к установке актуальной версии nginx из официального репозитория продукта:
sudo apt install nginx
Ubuntu
Установите пакеты, необходимые для подключения apt-репозитория:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-archive-keyring
Теперь нужно импортировать официальный ключ, используемый apt для проверки подлинности пакетов. Скачайте ключ:
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Проверьте, верный ли ключ был загружен:
gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
Вывод команды должен содержать полный отпечаток ключа 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
uid [ unknown] nginx signing key <signing-key@nginx.com>
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <signing-key@nginx.com>
Если отпечаток отличается от вышеуказанного, удалите файл ключа.
Для подключения apt-репозитория для стабильной версии nginx, выполните следующую команду:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Если предпочтительно использовать пакеты для основной версии nginx, выполните следующую команду вместо предыдущей:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Для использования пакетов из нашего репозитория вместо распространяемых в дистрибутиве, настройте закрепление:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
Чтобы установить nginx, выполните следующие команды:
sudo apt update
sudo apt install nginx
Внимание! Учтите, что получать продукт из официального репозитория надежнее в плане совместимости с дистрибутивом (операционной системы) который вы используете. В противном случае можно столкнуться с проблемами в конфигурацией, что для неопытного пользователя может быть не легкой задачей.