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

Введение

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

В этом руководстве мы обсудим, как установить Nginx на вашем сервере Ubuntu 20.04, настроить брандмауэр, управлять процессом Nginx и настроить блоки сервера для хостинга более одного домена с одного сервера.

Упростите развертывание приложений с DigitalOcean App Platform. Развертывание напрямую из GitHub занимает всего несколько минут.

Предварительные требования

Прежде чем приступить к этому руководству, у вас должен быть обычный пользователь без прав root с настроенными привилегиями sudo на вашем сервере. Вы можете узнать, как настроить учетную запись обычного пользователя, следуя нашему руководству по начальной настройке сервера для Ubuntu 20.04.

Вы также, возможно, захотите зарегистрировать доменное имя перед завершением последних шагов этого руководства. Чтобы узнать больше о настройке доменного имени с DigitalOcean, пожалуйста, обратитесь к нашему Введение в DNS DigitalOcean.

Когда у вас будет доступна учетная запись, войдите в систему от имени вашего обычного пользователя, чтобы начать.

Шаг 1 – Установка Nginx

Поскольку Nginx доступен в репозиториях Ubuntu по умолчанию, его можно установить из этих репозиториев, используя систему упаковки apt.

Поскольку это наше первое взаимодействие с системой упаковки apt в этой сессии, мы обновим локальный индекс пакетов, чтобы иметь доступ к самым последним спискам пакетов. Затем мы можем установить nginx:

  1. sudo apt update
  2. sudo apt install nginx

После принятия процедуры apt установит Nginx и все необходимые зависимости на ваш сервер.

Шаг 2 – Настройка брандмауэра

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

Перечислите конфигурации приложений, с которыми ufw умеет работать, набрав:

  1. sudo ufw app list

Вы должны получить список профилей приложений:

Output
Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH

Как показано выводом, доступно три профиля для Nginx:

  • Nginx Full: Этот профиль открывает как порт 80 (нормальный, нешифрованный веб-трафик), так и порт 443 (шифрованный трафик TLS/SSL)
  • Nginx HTTP: Этот профиль открывает только порт 80 (нормальный, нешифрованный веб-трафик)
  • Nginx HTTPS: Этот профиль открывает только порт 443 (шифрованный трафик TLS/SSL)

Рекомендуется включить самый строгий профиль, который все еще позволит доступ к настроенному вами трафику. В данный момент нам нужно разрешить трафик только на порту 80.

Вы можете включить это, набрав:

  1. sudo ufw allow 'Nginx HTTP'

Вы можете проверить изменение, набрав:

  1. sudo ufw status

В выводе будет указано, какой HTTP-трафик разрешен:

Output
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. Веб-сервер должен уже быть запущен и работать.

Мы можем проверить работу службы с помощью инициализационной системы systemd, набрав:

  1. systemctl status nginx
Output
● 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.

Вы можете получить доступ к стандартной странице приветствия Nginx, чтобы подтвердить, что программное обеспечение работает правильно, перейдя по IP-адресу вашего сервера. Если вы не знаете IP-адрес вашего сервера, вы можете найти его, используя инструмент icanhazip.com, который предоставит вам ваш общедоступный IP-адрес, полученный из другого местоположения в интернете:

  1. curl -4 icanhazip.com

Когда у вас есть IP-адрес вашего сервера, введите его в адресную строку вашего браузера:

http://your_server_ip

Вы должны получить стандартную страницу приветствия Nginx:

Если вы находитесь на этой странице, ваш сервер работает правильно и готов к управлению.

Шаг 4 – Управление процессом Nginx

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

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

  1. sudo systemctl stop nginx

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

  1. sudo systemctl start nginx

Чтобы остановить, а затем снова запустить службу, введите:

  1. sudo systemctl restart nginx

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

  1. sudo systemctl reload nginx

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

  1. sudo systemctl disable nginx

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

  1. sudo systemctl enable nginx

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

При использовании веб-сервера Nginx блоки сервера (аналогичные виртуальным хостам в Apache) могут быть использованы для инкапсуляции деталей конфигурации и размещения более одного домена на одном сервере. Мы настроим домен с именем your_domain, но вам следует заменить это своим собственным доменным именем.

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

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

  1. sudo mkdir -p /var/www/your_domain/html

Затем назначьте владельца каталога с использованием переменной среды $USER:

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

Разрешения на вашем корневом каталоге должны быть правильными, если вы не изменяли значение umask, которое устанавливает права доступа по умолчанию. Чтобы убедиться, что ваши разрешения правильны и позволяют владельцу читать, записывать и выполнять файлы, предоставляя только права на чтение и выполнение группам и другим, вы можете ввести следующую команду:

  1. sudo chmod -R 755 /var/www/your_domain

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

  1. sudo nano /var/www/your_domain/html/index.html

Внутри добавьте следующий образец HTML:

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

Сохраните и закройте файл, нажав Ctrl+X, чтобы выйти, затем когда будет предложено сохранить, введите Y, а затем Enter.

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

  1. sudo nano /etc/nginx/sites-available/your_domain

Вставьте в следующий конфигурационный блок, который аналогичен по умолчанию, но обновлен для нашего нового каталога и имени домена:

/etc/nginx/sites-available/your_domain
server {
        listen 80;
        listen [::]:80;

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

        server_name your_domain www.your_domain;

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

Обратите внимание, что мы обновили конфигурацию root до нашего нового каталога и server_name до нашего имени домена.

Затем давайте включим файл, создав ссылку на него в каталоге sites-enabled, из которого Nginx читает при запуске:

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

Примечание: Nginx использует распространенную практику, называемую символическими ссылками, или symlinks, чтобы отслеживать, какие из ваших серверных блоков включены. Создание символической ссылки подобно созданию ярлыка на диске, так что вы можете позже удалить ярлык из каталога sites-enabled, сохраняя при этом серверный блок в sites-available, если захотите его включить.

Теперь включены и настроены два серверных блока для ответа на запросы на основе их директив listen и server_name (вы можете узнать больше о том, как Nginx обрабатывает эти директивы здесь):

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

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

  1. sudo nano /etc/nginx/nginx.conf

Найдите директиву server_names_hash_bucket_size и удалите символ #, чтобы раскомментировать строку. Если вы используете nano, вы можете быстро найти слова в файле, нажав CTRL и w.

Примечание: Комментирование строк кода – обычно путем добавления символа # в начале строки – еще один способ отключения их без необходимости фактически их удалять. Многие файлы конфигурации поставляются с несколькими закомментированными опциями, чтобы их можно было включить или отключить, переключая их между активным кодом и документацией.

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Сохраните и закройте файл, когда закончите.

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

  1. sudo nginx -t

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

  1. sudo systemctl restart nginx

Теперь Nginx должен обслуживать ваше доменное имя. Вы можете проверить это, перейдя на http://ваше_доменное_имя, где вы должны увидеть что-то подобное:

Шаг 6 – Ознакомление с важными файлами и каталогами Nginx

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

Содержание

  • /var/www/html: Фактическое веб-содержимое, которое по умолчанию состоит только из стандартной страницы Nginx, которую вы видели ранее, обслуживается из каталога /var/www/html. Это можно изменить, изменив файлы конфигурации Nginx.

Конфигурация сервера

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

Журналы сервера

  • /var/log/nginx/access.log: Каждый запрос к вашему веб-серверу записывается в этот журнальный файл, если только Nginx не настроен иначе.
  • /var/log/nginx/error.log: Любые ошибки Nginx будут записаны в этот журнал.

Вывод

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

Если вы хотите создать более полный стек приложений, ознакомьтесь с статьей Как установить Linux, Nginx, MySQL, PHP (стек LEMP) на Ubuntu 20.04.

Чтобы настроить HTTPS для вашего доменного имени с бесплатным SSL-сертификатом, используя Let’s Encrypt, вы можете перейти к Как защитить Nginx с помощью Let’s Encrypt на Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04