Nginx – простой и надежный веб-сервер, на котором можно размещать сложные интернет-проекты с высоким трафиком, а также использовать его в качестве обратного прокси.

Как производится настройка Nginx подробно разберем на примере популярной ОС семейства Linux — Ubuntu версии 18.04. Также опишем особенности предыдущей LTS (Long Term Support) версии Ubuntu 16.04.

Что нужно для установки

Для инсталляции на Ubuntu 18.04 понадобится: установленная операционная система, имеющая статический IP-адрес, с доступом в интернет. Также желательно, чтобы файрвол UFW был включен.

Подготовка

Перед началом установки Nginx заходим в ОС под пользователем root, и создаем новый аккаунт с расширенными привилегиями sudo.

Вводим следующую команду*:

adduser host

* Здесь «host» – имя пользователя, под которым будем работать.

Далее вбиваем свою информацию об аккаунте или принимаем настройки по умолчанию, нажав «Enter».

Настройка доступа в учетную запись созданного пользователя зависит от того, какая используется root-аутентификация. Это может быть просто пароль, либо же SSH-ключи.

Если вход выполняется под паролем, то подключиться к новому пользователю можно по SSH*:

ssh host@194.61.0.6

*IP сервера в примере (194.61.0.6) следует заменить на актуальный.

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

  1. Открыть терминал и ввести команду:
rsync --archive --chown= host: host ~/.ssh /home/ host
  1. Добавить созданного пользователя в группу sudo:
usermod -aG sudo  host
  1. Авторизоваться под новым пользователем.

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

Инсталляцию будем выполнять прямо из репозитория Ubuntu, посредством пакетного менеджера apt:

$ sudo apt update
$ sudo apt install nginx

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

Настройка UFW

Перед предоставлением доступа к сервису, следует настроить файрвол.

Для просмотра приложений, с которыми будет взаимодействовать UFW, вводим следующую команду:

$ sudo ufw app list

Будет выведена следующая информация:

Установка и настройка Nginx на Ubuntu

Это означает, что UFW может работать с тремя вариантами протоколов веб-сервера:

  1. Full – открыты два порта (80 и 443).
  2. HTTP – открыт только 80 порт.
  3. HTTPS – открывается только 443 порт.

Пока не настроен SSL протокол, открываем 80 порт. Вводим команды:

$ sudo ufw allow 'Nginx HTTP'

Чтобы не потерять доступ по SSH, вводим команду:

$ sudo ufw allow ssh
$ sudo ufw enable

Будет выведено предупреждение:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Нужно согласиться (нажать «y»).

Проверяем:

$ sudo ufw status

На экране будет выведено:

Status: active

To                               Action             From
--                               ------             ----
Nginx HTTP                       ALLOW           Anywhere
22/tcp                           ALLOW           Anywhere
Nginx HTTP (v6)                  ALLOW           Anywhere (v6)
22/tcp (v6)                      ALLOW           Anywhere (v6)

HTTP протокол открыт.

Тестирование Nginx

После завершения инсталляции веб-сервера, Ubuntu запустит его автоматически.

Чтобы проверить, что он работает, нужно ввести команду:

$ systemctl status nginx

В случае успешного запуска службы, на экране должно отобразиться:

Установка и настройка Nginx на Ubuntu

Для того, чтобы полностью в этом убедиться, выполним запрос начальной страницы Nginx. Нужно ввести доменное имя или IP-адрес сервера в строке браузера.

Если IP-адрес неизвестен, существует несколько способов его выяснить.

В терминале набираем команду:

$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Отобразится несколько IP-адресов. По очереди их необходимо будет вставить в браузер, пока не отобразится страница приветствия Nginx.

Другой метод проверки видимости сервера в интернете:

$ curl -4 icanhazip.com

Полученный адрес следует, также прописать в браузере, чтобы увидеть стартовую страницу веб-сервера.

Она будет выглядеть вот так:

Установка и настройка Nginx на Ubuntu

Команды управления Nginx-сервером

Чтобы остановить web-сервер, вводим:

$ sudo systemctl stop nginx

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

$ sudo systemctl start nginx

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

$ sudo systemctl restart nginx

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

$ sudo systemctl disable nginx

Чтобы при внесении изменений в конфигурации веб-сервера, его можно было перезагрузить, не теряя соединений. Для этого вводим команду:

$ sudo systemctl reload nginx

Для возобновления запуска Nginx при старте вводим:

$ sudo systemctl enable nginx

Настройка виртуального хоста

На Nginx можно использовать серверные блоки для обслуживания нескольких доменов. Изначально у этого веб-сервера включен один виртуальный хост. Его файлы находятся в каталоге /var/www/html. Однако, это неудобно при размещении нескольких сайтов.

Чтобы это исправить в директории /var/www/ создадим каталог. В данном примере будем использовать условный домен «exemple.com», который нужно будет заменить своим доменом.

Начнем с создания каталога:

$ sudo mkdir -p /var/www/example.com/html

При помощи переменной $USER определим права каталога:

$ sudo chown -R $USER:$USER /var/www/example.com/html

Далее создадим пример страницы index.html:

$ snano /var/www/example.com/html/index.html

Вставим следующий код в файл:

<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

Затем создадим каталог – «sites-available» (директория, в которой хранятся серверные блоки):

$ sudo nano /etc/nginx/sites-available/example.com

Впишем в него код, указав свой каталог и домен:

server {
listen 80;
listen [::]:80;

root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;

server_name example.com www.example.com;

location / {
try_files $uri $uri/ =404;
}
}

После этого создадим ссылку в каталоге «sites-enabled» (директория, в которой находятся, все настройки хоста), чтобы файл стал доступен:

$ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Теперь настроены, и задействованы два виртуальных хоста. По умолчанию запросы, поступившие на 80 порт будут обрабатываться первым хостом, если они не соответствуют «www.example.com» или «example.com».

Для предотвращения различных сбоев с памятью, из-за дополнительных серверных имен, отредактируем файл nginx.conf.

В открывшемся файле ищем строку:

$ sudo nano /etc/nginx/nginx.conf

Убираем символ «#», сохраняем и закрываем.

Теперь выполним проверку файлов Nginx на отсутствие синтаксических ошибок:

$ sudo nginx -t

Чтобы изменения вступили в силу, перезапускаем Nginx:

$ sudo systemctl restart nginx

Для проверки корректной работы домена введем в браузере ссылку «http://example.com». Если все настройки выполнены правильно, мы увидим следующую надпись:

Установка и настройка Nginx на Ubuntu

Ошибки, которые будут возникать в процессе работы сервера Nginx, можно посмотреть в файле error.log.

/var/log/nginx/error.log

Все запросы, поступающие к вашему web-серверу, будут записываться в файле access.log.

/var/log/nginx/access.log