Глава 1. Основы

Введение

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

Установка в Debian/Ubuntu

Задача

Вам требуется установить NGINX с открытым исходным кодом в машине с Debian или Ubuntu.

Решение

Создайте некий файл с названием /etc/apt/sources.list.d/nginx.list, который содержит следующее содержимое:


deb http://nginx.org/packages/mainline/OS/ CODENAME nginx
deb-src http://nginx.org/packages/mainline/OS/ CODENAME nginx
		

В зависимости от вашего дистрибутива замените в этом файле OS в самом конце каждого из URL на ubuntu или debian. Для Debian измените CODENAME на jessie или stretch, а для Ubuntu на trusty, xenial,artful или bionic. Затем исполните следующие команды:


wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
apt-get update
apt-get install -y nginx
/etc/init.d/nginx start
		

Обсуждение

Созданный вами файл инструктирует систему управления пакетами apt применять Официальный репозиторий пакетов NGINX. Следующая команда выгружает ключ GPG подписи пакета NGINX и импортирует его в apt. Предоставление для apt этого ключа подписи делает возможной проверку подлинности пакетов из репозитория. Следующая команда apt-get update инструктирует систему apt обновить её перечни пакетов из известных репозиториев. После того как данный список пакетов освежён, вы можете устанавливать NGINX с открытым исходным кодом из официального репозитория NGINX. После того как вы его установите, заключительная команда запускает NGINX.

Установка в RedHat/CentOS

Задача

Вам требуется установить NGINX с открытым исходным кодом в машине в RedHat или CentOS.

Решение

Создайте некий файл с названием /etc/yum.repos.d/nginx.repo, который содержит следующее содержимое:


[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
		

В зависимости от вашего дистрибутива замените в этом файле OS в самом конце каждого из URL на rhel или centos. Измените OSRELEASE на 6 или 7, для версий 6.x или 7.x, соответственно. Затем исполните следующие команды:


yum -y install nginx
systemctl enable nginx
systemctl start nginx
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
		

Обсуждение

Созданный вами для данного решения файл инструктирует вашу систему управления пакетами yum в качестве репозитория пакетов применять Официальный репозиторий открытого исходного кода NGINX, указывает systemd на разрешение NGINX во время загрузки и сообщает ему о необходимости запуска прямо сейчас. Команды межсетевого экрана открывают порт 80 для протокола TCP, который выступает значением порта по умолчанию для HTTP. Самая последняя команда перезагружает межсетевой экран для фиксации этих изменений.

Установка NGINX Plus

Задача

Вам требуется установить NGINX Plus.

Решение

Посетите http://cs.nginx.com/repo_setup. В полученном ниспадающем меню выберите ту ОС, в которой вы устанавливаете, а затем следуйте получаемым инструкциям. Эти инструкции аналогичны тем, которые применяются при установке решений с открытым исходным кодом; тем не менее, вам требуется установить некий сертификат чтобы соответствовать аутентификации основного репозитория NGINX Plus.

Обсуждение

NGINX отслеживает получаемое вами руководство по установки в современном состоянии с инструкциями по установке выбранного NGINX Plus. В зависимости от вашей ОС и версии эти инструкции слегка отличаются, но имеется одно общее место. Вам следует зарегистрироваться в самом портале NGINX для выгрузки сертификата и ключа для предоставления их вашей системе, которые будут применяться для аутентификации в общем репозитории NGINX Plus.

Проверка вашей установки

Задача

Вы желаете удостовериться в правильности установки NGINX и проверить её версию.

Решение

Вы можете удостовериться в верности установки NGINX и проверить её версию применив следующую команду:


$ nginx -v
nginx version: nginx/1.15.3
		

Как показывает это пример, получаемый отклик отображает номер версии.

Вы можете подтвердить что NGINX запущен применив такую команду:


$ ps -ef | grep nginx
root      1738     1  0  19:54  ?   00:00:00 nginx: master process
nginx     1739  1738  0  19:54  ?   00:00:00 nginx: worker process
		

Применённая команда ps перечисляет запущенные процессы. Направляя её в конвейер через grep вы можете отыскивать в получаемом выводе специфичные слова. Данный пример использует grep для поиска nginx. Если NGINX запущен, вы всегда можете наблюдать хозяина и один или более процессов исполнителей. Относительно инструкций по запуску NGINX отсылаем вас к следующему разделу. Для отслеживания того как NGINX запускается в качестве демона применяйте методологии init.d или systemd.

Чтобы подтвердить тот факт что NGINX возвращает корректные запросы, воспользуйтесь браузером для выполнения запросов в своей машине или примените curl:


$ curl localhost
		

Вы обнаружите NGINX установленный по умолчанию сайт HTML Welcome.

Обсуждение

Команда nginx позволяет вам взаимодействовать с самим исполняемым файлом NGINX для проверки его версии, перечисления установленных модулей, проверки настроек и отправки сигналов его процессу хозяина. Для обслуживания им запросов, NGINX должен быть запущен. Команда ps является безошибочным вариантом выявления того запущен ли NGINX в качестве демона или в фоновом режиме. Устанавливаемая по умолчанию конфигурация по умолчанию запускает NGINX в качестве статического сервера сайта HTTP с портом 80. Вы можете проверить этот установленный по умолчанию сайт выполняя некий запрос HTTP к машине с localhost, а также с соответствующим адресом IP и именем хоста.

Ключевые файлы, команды и каталоги

Задача

Вам требуется понимать все важные каталоги и команды NGINX.

Решение

Файлы и каталоги NGINX

/etc/nginx/

Каталог /etc/nginx/ для настройки по умолчанию является корнем для данного сервера NGINX. Внутри этого каталога вы можете обнаружить файлы настроек, которые указывают NGINX как ему себя вести.

/etc/nginx/nginx.conf

Файл /etc/nginx/nginx.conf выступает установленной по умолчанию точкой входа, которую применяет сама служба NGINX. Этот файл конфигурации настраивает глобальные установки для таких моментов как процесс исполнителя, регулировка, регистрация, загрузка динамических модулей, а также ссылки на прочие файлы настройки NGINX. В установленной по умолчанию конфигурации этот файл /etc/nginx/nginx.conf содержит блок верхнего уровня Code, который содержит все файлы настроек в описанном далее каталоге.

/etc/nginx/conf.d/

Каталог /etc/nginx/conf.d/ содержит устанавливаемый по умолчанию файл конфигурации сервера HTTP. Заканчивающиеся на .conf файлы из этого каталога включаются в блок верхнего уровня http внутри основного файла /etc/nginx/nginx.conf/. Самым лучшим приёмом на практике для организации вашей конфигурации будет применение оператора include с тем, чтобы ваши файлы настройки были краткими. В некоторых репозиториях пакетов эта папка именуется sites-enabled, а файлы настроек связываются из некой папки с названием site-available; это соглашение является устаревшим.

/var/log/nginx/

Каталог /var/log/nginx/ является устанавливаемым по умолчанию местоположением журналов NGINX. Внутри этого каталога вы можете обнаружить файл access.log и файл error.log. Первый является журналом доступа и содержит записи для каждого обслуженного запроса NGINX. Второй файл регистрации ошибок содержит события с ошибками и отладочную информацию когда включён модуль отладки.

Команды NGINX

nginx -h

Отображает меню подсказок.

nginx -v

Выдаёт номер версии NGINX.

nginx -V

Показывает номер версии NGINX, информацию о сборке и параметры конфигурации, которые отображают собранные модули в данном исполняемом файле NGINX.

nginx -t

Проверка конфигурации NGINX.

nginx -T

Проверяет конфигурацию NGINX и выводит на ваш экран допустимые настройки. Эта команда полезна при поиске поддержки.

nginx -s signal

Данный флаг -s отправляет некий сигнал имеющемуся процессу хозяина NGINX. Вы имеете возможность отправлять такие сигналы как stop, quit, reload и reopen. Сигнал stop немедленно отключает имеющийся процесс NGINX. Синал quit останавливает процесс NGINX после того как он завершит обработку влетевших в него запросов. Сигнал reload перезагружает данную конфигурацию. Сигнал reopen инструктирует NGINX повторно открыть файлы журналов.

Обсуждение

Понимая эти ключевые файлы, каталоги и команды, вы находитесь в хороших условиях для того чтобы приступить к работе с NGINX. Освоив эти знания, вы способны изменять установленные по умолчанию файлы конфигурации и проверять изменения применяя команду nginx -t. Если ваша проверка успешна, вы также знаете как указать NGINX на необходимость перезагрузить его настройки при помощи соответствующей команды nginx -s reload.

Обслуживание статического содержания

Задача

Вам требуется обслуживать статическое содержимое с помощью NGINX.

Решение

Перепишите установленную в /etc/nginx/conf.d/default.conf по умолчанию конфигурацию сервера HTTP со следующим образцом настроек NGINX:


server {

    listen 80 default_server;
    server_name www.example.com;

    location / {
        root /usr/share/nginx/html;
        # alias /usr/share/nginx/html;
        index index.html index.htm;
    }
}
 	   

Обсуждение

Данная конфигурация обслуживает статические файлы поверх HTTP по порту 80 из своего каталога /usr/share/nginx/html/. Самая первая строка в этой конфигурации определяет блок server. Он задаёт новый контекст для отслеживания NGINX. Строка два указывает NGINX на необходимость выполнять ожидание по порту 80, а значение параметра default_server указывает NGINX на необходимость применения данного сервера в качестве контекста по умолчанию для порта 80. Директива server_name определяет значение имени хоста или имён хостов на которые будут направляться запросы для данного сервера. Если данная конфигурация не определила данный контекст в качестве default_server, NGINX будет направлять запросы к этому серверу только когда сам заголовок хоста HTTP соответствует тому значению, которое производится для имеющейся директивы server_name.

Блок location определяет некую настройку на основе значения пути в получаемом URL. Значение пути, или часть всего URL, остающаяся после значения домена имеет сокращение URI. Лучше всего NGINX будет устанавливать соответствие запрошенному значению URI блоку location. Данный образец применяет / для соответствия всем запросам. Значение директивы root указывает NGINX где отыскивать статические файлы при обслуживании содержимого для этого заданного контекста. Значение URI самого запроса добавляется в конец к значению директивы root при поиске запрашиваемого файла. Если мы предоставили некий префикс URI для своей директивы location, он был бы добавлен в конец получаемого пути, только если мы не применяем значение каталога alias вместо root. Наконец, значение директивы index снабжает NGINX неким именем файла по умолчанию, либо списка файлов для проверки в том случае, когда не указан дальнейший путь.

Аккуратная перезагрузка

Задача

Вам требуется перезагрузить свою конфигурацию без отбрасывания пакетов.

Решение

Воспользуйтесь методом NGINX reload для достижения аккуратной перезагрузки вашей конфигурации без останова самого сервера:


$ nginx -s reload
		

Данный пример перезагружает вашу систему NGINX при помощи самого исполняемого файла NGINX для отправки сигнала имеющемуся процессу хозяина.

Обсуждение

Перезагрузка имеющейся конфигурации NGINX без остановки самого сервера предоставляет возможность изменения настроек на лету без какого бы то ни было отбрасывания пакетов. Для некой динамичной среды с высоким значением работы без останова вам будет необходимо изменять в некий момент времени изменять свои настройки балансировки нагрузки. NGINX позволяет осуществлять это оставляя в рабочем состоянии сам балансировщик нагрузки. Это свойство делает возможными многочисленные возможности, такие как повторный запуск управления настройками в некой среде в реальном режиме времени, или сборку некого приложения и осведомлённого о кластере модуля в какую- то динамическую конфигурацию с последующей перезагрузкой NGINX для выполнения его соответствия потребностям вашего окружения.