береженого кольт бережет
береженого кольт бережет

Установка NGINX в UBUNTU 20.04

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

Данный мануал поможет установить Nginx на сервер Ubuntu 20.04. также вы узнаете, как разблокировать трафик Nginx в брандмауэре, управлять этим сервисом и настроить  блок server (аналог виртуального хоста).

1: Установка Nginx

Пакет Nginx можно найти в стандартном репозитории Ubuntu и установить с помощью пакетного менеджера apt.

Если это ваше первое взаимодействие с системой пакетирования apt в текущей сессии, вы должны обновить индекс пакетов. После этого можно установить Nginx.

$ sudo apt update
$ sudo apt install nginx

Чтобы подтвердить установку, нажмите Enter. После этого пакетный менеджер установит Nginx и его зависимости.

2: Настройка брандмауэра

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

Откройте список доступных профилей ufw:

$ sudo ufw app list

Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

В этом списке вы найдете три профиля Nginx:

  • Nginx Full: открывает порт 80 (незашифрованный сетевой трафик) и 443 (зашифрованный трафик TLS/SSL).
  • Nginx HTTP: открывает незашифрованный трафик HTTP на порт 80.
  • Nginx HTTPS: для зашифрованного трафика TLS/SSL на порт 443.

Лучше использовать профиль, который поддерживает шифрование. Но поскольку на свежем сервере ещё не настроен SSL, мы можем открыть только порт 80.

Чтобы включить соответствующий профиль, введите:

$ sudo ufw allow 'Nginx HTTP'

Убедитесь в том, что профиль включился:

$ sudo ufw status

Команда должна показать, что трафик HTTP разблокирован:

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

3: Тестирование веб-сервера

После установки Ubuntu 20.04 запустит Nginx автоматически. На данный момент веб-сервер должен работать.

Чтобы убедиться в том, что Nginx запустился, запросите его состояние в системе инициализации systemd.

$ systemctl status nginx

nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
Docs: man:nginx(8)
Main PID: 2369 (nginx)
Tasks: 2 (limit: 1153)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2380 nginx: worker process

Как видите, сервис запущен успешно.

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

Если вы не знаете своего IP-адреса, вы можете узнать его с помощью командной строки. Введите:

$ curl -4 icanhazip.com

Узнав свой IP-адрес, введите его в браузер, чтобы убедиться, что веб-сервер работает должным образом.

http://your_server_ip

На экране должна появиться стандартная страница Nginx:

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

4: Управление процессами Nginx

Теперь давайте рассмотрим несколько базовых команд для управления сервисом Nginx.

Чтобы остановить Nginx, введите:

$ sudo systemctl stop nginx

Чтобы запустить его, введите:

$ sudo systemctl start nginx

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

$ sudo systemctl restart nginx

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

$ sudo systemctl reload nginx

По умолчанию Nginx автоматически запускается во время загрузки сервера. Это поведение можно отключить:

$ sudo systemctl disable nginx

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

$ sudo systemctl enable nginx

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

На веб-сервере Nginx можно использовать виртуальные хосты (в контексте Nginx они называются блоками server) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь мы используем условный домен your_domain.com, но вы должны заменить его собственным доменом.

В Ubuntu 20.04 Nginx по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для работы одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в  /var/www для сайта your_domain.com, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не соответствует другим сайтам.

Создайте каталог your_domain.com, используйте опцию -p для создания всех необходимых родительских каталогов:

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

Затем установите права на каталог с помощью переменной $USER:

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

Права должны быть установлены верно, если вы не поменяли unmask, но на всякий случай вы можете ввести такую команду:

$ sudo chmod -R 755 /var/www/your_domain.com

Затем создайте образец страницы index.html с помощью nano или другого редактора:

$ nano /var/www/your_domain.com/html/index.html

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

Сохраните и закройте файл.

Чтобы Nginx смог обслуживать этот контент, необходимо создать файл виртуального хоста с правильным набором директив. Вместо того чтобы напрямую изменять конфигурации по умолчанию, создайте новый файл /etc/nginx/sites-available/your_domain.com.

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

Вставьте в файл следующие конфигурации. Они похожи на конфигурации по умолчанию, но содержат правильный домен и каталог:

server {
   listen 80;
   listen [::]:80;
   root /var/www/your_domain.com/html;
   index index.html index.htm index.nginx-debian.html;
   server_name your_domain.com www.your_domain.com;
   location / {
      try_files $uri $uri/ =404;
   }
}

Обратите внимание, что root содержит путь к новому каталогу, а server_name – новый домен.

Сохраните и закройте файл.

Включите файл, создав симлинк в каталоге sites-enabled:

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

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

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

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

$ sudo nano /etc/nginx/nginx.conf

Найдите строку server_names_hash_bucket_size и раскомментируйте ее, удалив символ #:

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

Сохраните и закройте файл.

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

$ sudo nginx -t

Перезапустите Nginx, чтобы новые параметры вступили в силу:

$ sudo systemctl restart nginx

Теперь Nginx обслуживает домен вашего сайта. Чтобы убедиться в этом, откройте ссылку http://your_domain в браузере.

Success!
The your_domain.com server block is working!

6: Важные файлы и каталоги Nginx

Теперь вы знаете, как управлять сервисом. Пора познакомиться с важными файлами и каталогами веб-сервера Nginx.

Контент

  • /var/www/htm: содержит текущий контент сайта. По умолчанию в нём находится только стандартная посадочная страница, которую вы уже видели. Этот каталог можно изменить в конфигурационном файле Nginx.

Настройки сервера

  • /etc/nginx: каталог настроек nginx, в котором хранятся все конфигурационные файлы.
  • /etc/nginx/nginx.conf: главный конфигурационный файл Nginx, содержащий глобальные настройки веб-сервера.
  • /etc/nginx/sites-available/: каталог, в котором хранятся настроенные блоки server (виртуальные хосты) каждого отдельного сайта. Nginx не будет использовать эти блоки, пока ссылка на них не появится в каталоге sites-enabled (о нём речь пойдёт дальше). Как правило, этот каталог используется для настройки виртуальных хостов.
  • /etc/nginx/sites-enabled/: каталог, в котором хранятся включенные блоки server. Чтобы включить блок, нужно создать символьную ссылку на файл, хранящийся в каталоге sites-available.
  • /etc/nginx/snippets: этот каталог хранит сниппеты — фрагменты настроек, которые можно включить в конфигурацию Nginx. Как правило, в качестве фрагментов добавляют потенциально повторяемые сегменты конфигурации.

Логи

  • /var/log/nginx/access.log: регистрирует все запросы, полученные веб-сервером Nginx (если не настроено другое поведение).
  • /var/log/nginx/error.log: хранит все сообщения об ошибках Nginx.