Как установить Nginx на Ubuntu

Nginx – наиболее популярный веб-сервер, на котором есть возможность размещать объемные сайты с большим трафиком.  В отличие от Apache, в Nginx рабочие процессы обслуживаются одновременно множеством соединений, мультиплексируя их вызовами операционной системы, что обеспечивает низкое потребление серверных ресурсов. Плюсом есть также то, что он может использоваться как обратный прокси-сервер.

Давайте подробнее рассмотрим и поможем вам разобраться с тем, как установить Nginx на Ubuntu.

Настройка веб-сервера nginx после установки

Авторизуйтесь в систему под root-пользователем, чтобы начать.

Пакет Nginx доступен в стандартном репозитории системы Ubuntu.

Для начала обновим в индекс пакетов (apt) (в случае, если это первое взаимодействие с системой пакетирования apt в текущей сессии):

apt update

Далее перейдем к установке Nginx.

apt install nginx

В терминале отобразится список устанавливаемых пакетов. Нажмите Y и Enter для продолжения инсталляции, и Nginx будет установлен со всеми его зависимостями.

Настройка фаервола UFW

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

Откройте список профилей ufw:

ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

Как результат, получаем отображение трёх профилей Nginx:

Nginx Full: открыть как незащищенное соединение (80-й порт) так и защищенное (443-й порт).

Nginx HTTP: открыть исключительно незащищенное соединение (на 80 порт).

Nginx HTTPS: открыть защищенное соединение (порт 443).
Поскольку на Nginx первоначально не настроена работа по защищенному соединению, для начала включаем трафик по 80 порту.

Для того чтобы включить выполняем:

ufw allow 'Nginx HTTP'

Проверка статуса профиля:

ufw status

Получаем вывод, что трафик HTTP разрешен:

Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)

Тест веб-сервера
После того как установим Ubuntu 18, Nginx запустится автоматически. Для проверки того, что это действительно так, узнаем его статус в инициализации systemd:
systemctl status nginx

Получаем информацию о том, что Nginx активен.

Active: active (running) since Sat 2020-07-04 09:28:52 PDT; 2s ago

Второй способ с помощью посадочной страницы Nginx. Её проверяем в браузере по IP-адресу, который вы получали в письме с данными доступа к серверу, или по доменному имени.
Вводим IP из письма в браузере с целью удостовериться, что все работает:
http://server_domain_or_IP
Получаем типичную посадочную страницу Nginx:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

Управление процессами Nginx
Перед операциями остановки и перезапуска Nginx настоятельно рекомендуем проверять корректность синтаксиса его конфигурационных файлов, следующей командой:

nginx -t

Если после выполнения команды, вы получите следующий вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

То можно смело переходить к выполнению операций перезапуска Nginx`a.

После того, как мы запомнили это сакральное правило, выучим необходимые базовые команды по управлению веб-сервером.
Для остановки Nginx, выполните:

systemctl stop nginx

Чтобы запустить используем:

systemctl start nginx

Чтобы перезагрузить:

systemctl restart nginx

Для обновления настроек (в текущей сессии) введите команду:

systemctl reload nginx

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

systemctl disable nginx

Для восстановления автозапуска сервиса, используйте команду:

systemctl enable nginx

Проверить включен или выключен автоматический запуск:

systemctl is-enabled nginx

Настройка виртуальных хостов
На веб-сервере Nginx есть возможность использования виртуальных хостов (или по-другому блоки server) для разделения настроек и создания нужного количества доменов на одном сервере.
Nginx по дефолту выделяет единственный активный виртуальный хост для обслуживания каталога /var/www/html. В случае, если необходимо размещать больше одного сайта, необходимо добавить новые виртуальные хосты.
Добавим отдельную корневую директорию для нашего нового домена.
Создайте каталог ваш_домен, воспользовавшись флагом -p для добавления родительских каталогов:

mkdir -p /var/www/ваш_домен/html

Зададим владельца на корневую директорию домена:

chown -R root:root /var/www/ваш_домен/html

Если вы создаете отдельного пользователя для вашего сайта, то вместо root-а укажите нужного пользователя.
Если не вносились изменения в umask, то права будут заданы корректные, чтобы проверить:

chmod -R 755 /var/www/ваш_домен

После проверки создаем шаблон страницы index.html в редакторе vim:

vim /var/www/ваш_домен/html/index.html

Внесите в файл:

<html>
<head>
<title> Добро пожаловать на ваш_домен!</title>
</head>
<body>
<h1>Success! VirtualHost для ваш_домен работает </h1>
</body>
</html>

Сохраняем изменения и выходим.

Настройка серверных блоков

Для обслуживания контента Nginx`ом, создаем файл конфигурации виртуального хоста с верными директивами.
Создадим новый файл /etc/nginx/sites-available/ваш_домен :

vim /etc/nginx/sites-available/ваш_домен

Внесите в файл конфигурации указанные строки. Они соответствуют стандартным настройкам VirtualHost’а, но имеют верный домен и каталог:

server {
listen 80;
listen [::]:80;
root /var/www/ваш_домен/html;
index index.html index.htm index.nginx-debian.html;
server_name ваш_домен www.ваш_домен;
location / {
try_files $uri $uri/ =404;
}
}

Обратите внимание, что root содержит путь нового каталога, а server_name – новый домен, ваш_домен.
Сохраняем внесенные изменения и выходим из редактора.
Активируйте файл, указав символьную ссылку в каталоге sites-enabled:

ln -s /etc/nginx/sites-available/ваш_домен /etc/nginx/sites-enabled/

На данном этапе вы имеете два виртуальных хоста, которые обслуживают запросы клиентов на базе директив listen и server_name:

  • ваш_домен будет обслуживать запросы для www.ваш_домен и ваш_домен.
  • default будет отвечать на запросы по порту 80, если они не соответствуют остальным виртуальным хостам.

Во избежание недостатка памяти, из-за добавления дополнительных имен, редактируем одно значение в файле /etc/nginx/nginx.conf
Открываем файл:

vim /etc/nginx/nginx.conf

Раскомментируем строку server_names_hash_bucket_size, убрав #:

...
http {
...
server_names_hash_bucket_size 64;
...
}
...

Проверяем корректность файла конфигурации Nginx:

nginx -t

Сохраняем коррективы и выходим.
Изменения вступят в силу, после перезагрузки Nginx:

systemctl restart nginx

Как результат ваш сайт станет обслуживаться Nginx`ом.
Проверить правильность настройки можно по ссылке http://ваш_домен.
Базовые каталоги и файлы Nginx
Контент
/var/www/html: вмещает контент сайта. Стандартно в ней сохраняется посадочная страница. В конфигурационном файле Nginx вы можете вносить изменения по каталогу.
Настройки сервера
/etc/nginx: каталог настроек nginx (тут находятся все конфигурационные файлы).
/etc/nginx/nginx.conf: основной конфигурационный файл Nginx, содержит глобальные настройки веб-сервера.
/etc/nginx/sites-available: включает конфигурационные файлы по каждому сайту отдельно.
Чтобы Nginx обрабатывал эти блоки, нужно разместить ссылки на них в в каталоге sites-enabled. Обычно употребляется для настройки виртуальных хостов.
/etc/nginx/sites-enabled/: каталог, хранящий конфигурационные файлы сайтов. Для активации файла, нужно создать символьную ссылку на файл, размещенный в каталоге sites-available.
/etc/nginx/snippets: содержит фрагменты настроек (потенциально повторяемые сегменты конфигурации)
Логи
/var/log/nginx/access.log: лог сохраняет запросы, которые поступают к веб-сервером Nginx (возможно задать другое поведение).
/var/log/nginx/error.log: отображает уведомления об ошибках Nginx.
Заключение
В этом гайде мы разобрали основные советы и рекомендации по настройке web-сервера Nginx после установки.
Nginx готов к обслуживанию контента вашего сайта.