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-ключей, тогда их необходимо скопировать в созданный аккаунт. Для этого нужно следовать следующему алгоритму:
- Открыть терминал и ввести команду:
rsync --archive --chown= host: host ~/.ssh /home/ host
- Добавить созданного пользователя в группу sudo:
usermod -aG sudo host
- Авторизоваться под новым пользователем.
Как установить Nginx на Ubuntu
Инсталляцию будем выполнять прямо из репозитория Ubuntu, посредством пакетного менеджера apt:
$ sudo apt update $ sudo apt install nginx
По завершению исполнения команд, обновление и установка Nginx на сервере будет окончена.
Настройка UFW
Перед предоставлением доступа к сервису, следует настроить файрвол.
Для просмотра приложений, с которыми будет взаимодействовать UFW, вводим следующую команду:
$ sudo ufw app list
Будет выведена следующая информация:
Это означает, что UFW может работать с тремя вариантами протоколов веб-сервера:
- Full – открыты два порта (80 и 443).
- HTTP – открыт только 80 порт.
- 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. Нужно ввести доменное имя или IP-адрес сервера в строке браузера.
Если IP-адрес неизвестен, существует несколько способов его выяснить.
В терминале набираем команду:
$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Отобразится несколько IP-адресов. По очереди их необходимо будет вставить в браузер, пока не отобразится страница приветствия Nginx.
Другой метод проверки видимости сервера в интернете:
$ curl -4 icanhazip.com
Полученный адрес следует, также прописать в браузере, чтобы увидеть стартовую страницу веб-сервера.
Она будет выглядеть вот так:
Команды управления 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, можно посмотреть в файле error.log.
/var/log/nginx/error.log
Все запросы, поступающие к вашему web-серверу, будут записываться в файле access.log.
/var/log/nginx/access.log