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

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

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

sudo apt update
sudo apt install nginx

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

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

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

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

sudo ufw app list

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

OutputAvailable applications:
 Nginx Full
 Nginx HTTP
 Nginx HTTPS
 OpenSSH

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

  • * Nginx Full *: этот профиль открывает порт 80 (обычный незашифрованный веб-трафик) и порт 443 (зашифрованный трафик TLS / SSL).

  • * Nginx HTTP *: этот профиль открывает только порт 80 (обычный, незашифрованный веб-трафик)

  • * Nginx HTTPS *: этот профиль открывает только порт 443 (зашифрованный трафик TLS / SSL)

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

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

sudo ufw allow 'Nginx HTTP'

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

sudo ufw status

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

OutputStatus: 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 + init, чтобы убедиться, что служба работает, набрав:

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:  since Fri 2018-04-20 16:08:19 UTC; 3 days ago
    Docs: man:nginx(8)
Main PID: 2369 (nginx)
   Tasks: 2 (limit: 1153)
  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-адрес вашего сервера, вы можете получить его несколькими различными способами.

Попробуйте ввести это в командной строке вашего сервера:

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

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

В качестве альтернативы вы можете набрать этот, который должен дать вам ваш публичный IP-адрес, как видно из другого места в Интернете:

curl -4 icanhazip.com

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

http://IP_адрес_вашего_сервера или example.com

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

 

Эта страница включена в Nginx, чтобы показать вам, что сервер работает правильно.

Шаг 4 - Управление процессом 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 серверный блоки (аналог виртуальных хостов в Apache) используются для инкапсуляции настроек сайтов и позволяют хостить более одного домена на сервере. Мы рассмотрим настройку серверных блоков на примере example.com, но вам будет необходимо заменить этот домен своим реальным доменным именем. Узнать больше о настройке доменных имён в DigitalOcean вы можете из нашего руководства Введение в DNS DigitalOcean.

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

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

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

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

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

Теперь права должны для корневой директории быть настроены правильным образом при условии, что вы не меняли своё значение umask. На всяких случай мы можем удостовериться в этом командой:

sudo chmod -R 755 /var/www/example.com

Далее создадим страницу index.html в nano или любом другом текстовом редакторе:

nano /var/www/example.com/html/index.html

Добавим в файл следующий HTML:

/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>

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

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

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

Скопируйте следующий текст настроек серверного блока в созданный файл:

/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;
        }
}

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

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

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

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

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

Для того, чтобы избежать потенциальной проблемы hash bucket memory, которая может появиться при добавлении дополнительных имён серверов, нам необходимо изменить одно значение в файле /etc/nginx/nginx.conf. Откройте файл командой:

sudo nano /etc/nginx/nginx.conf

Найдите директиву server_names_hash_bucket_size и удалите символ # для того, чтобы раскомментировать её:

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

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

sudo nginx -t

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

Если никаких проблем не обнаружилось, перезапустите Nginx для применения внесённых изменений:

sudo systemctl restart nginx

Теперь Nginx должен корректно обрабатывать ваше новое доменное имя. Вы можете убедиться в этом набрав в браузере http://example.com.

 

Шаг 6 - Знакомство с важными файлами и каталогами 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: в этой директории хранятся фрагменты конфигурации, которые можно использовать при конфигурации любых сайтов. Фрагменты конфигурации, которые потенциально могут быть использованы в нескольких файлах конфигурации, являются прекрасными кандидатами для создания этих сниппетов.

Логи сервера

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