URL: https://www.progressiverobot.com/nginx-ubuntu-18-04-ru/

*Предыдущая версия руководства была написана Джастином Эллингвудом.*

Введение

Nginx является одним из самых популярных веб-серверов в мире, его используют для хостинга самых больших и нагруженных сайтов в Интернете. Nginx в подавляющем большинстве случаев менее требователен к ресурсам, чем Apache; его можно использовать как в качестве веб-сервера, так и в качестве обратного прокси-сервера (reverse proxy).

В этом руководстве мы рассмотрим процесс установки Nginx на ваш сервер с Ubuntu 18.04.

Перед установкой

nginx illustration for: Перед установкой

Перед тем, как начать следовать описанным в этой статье шагам, убедитесь, что у вас есть обычный не-рутовый (non-root) пользователь с привилегиями sudo. Узнать, как настроить такого пользователя на вашем сервере, можно из статьи о первичной настройке сервера на Ubuntu 18.04.

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

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

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

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

				
					
sudo apt update

sudo apt install nginx

				
			

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

Шаг 2 - Настройка файрвола

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

Для вывода настроек доступа для приложений, зарегистрированных в ufw, введём команду:

				
					
sudo ufw app list

				
			

В результате выполнения этой команды будет выведен список профилей приложений:

				
					
[secondary_label Вывод]

Available applications:

  Nginx Full

  Nginx HTTP

  Nginx HTTPS

  OpenSSH

				
			

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

  • Nginx Full: этот профиль открывает порты 80 (обычный, не шифрованный веб-трафик) и 443 (трафик шифруется с помощью TLS/SSL).
  • Nginx HTTP: этот профиль открывает только порт 80 (обычный, не шифрованный веб-трафик).
  • Nginx HTTPS: этот профиль открывает только порт 443 (трафик шифруется с помощью TLS/SSL).

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

Сделать это можно следующей командой:

				
					
sudo ufw allow 'Nginx HTTP'

				
			

Вы можете проверить изменения введя команду:

				
					
sudo ufw status

				
			

В результате должен отобразиться вывод следующего вида:

				
					
[secondary_label Вывод]

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 18.04 запустит Nginx автоматически. Таким образом веб-сервер уже должен быть запущен.

Мы можем убедиться в этом выполнив следующую команду:

				
					
systemctl status nginx

				
			
				
					
[secondary_label Вывод]

● 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 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, доступная по умолчанию при вводе доменного имени или IP адреса сервера. Если вы не знаете публичного IP адреса сервера, вы можете найти этот IP адрес несколькими способами.

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

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

				
			

В результате будет выведено несколько IP адресов. Попробуйте вставить каждый из них в браузер.

Другим способом определить свой IP адрес будет проверка, как ваш сервер виден из Интернета:

				
					
curl -4 icanhazip.com

				
			

Наберите полученный IP адрес или доменное имя в вашем веб-браузере.

				
					
http://<^>IP_адрес_вашего_сервера<^>

				
			

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

Если вы видите подобную страницу в своём браузере, вы успешно установили Nginx.

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

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

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

				
					
sudo systemctl stop nginx

				
			

Для запуска остановленного веб-сервера наберите:

				
					
sudo systemctl start nginx

				
			

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

				
					
sudo systemctl restart nginx

				
			

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

				
					
sudo systemctl reload nginx

				
			

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

				
					
sudo systemctl disable nginx

				
			

Для повторного включения запуска Nginx при старте сервера введите:

				
					
sudo systemctl enable nginx

				
			

Шаг 5 - Настройка серверных блоков (рекомендуется)

При работе с Nginx серверный блоки (аналог виртуальных хостов в Apache) используются для инкапсуляции настроек сайтов и позволяют хостить более одного домена на сервере. Мы рассмотрим настройку серверных блоков на примере example.com, но вам будет необходимо заменить этот домен своим реальным доменным именем. Узнать больше о настройке доменных имён в the cloud provider вы можете из нашего руководства Введение в DNS the cloud provider.

Nginx для Ubuntu 18.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:

				
					
[label /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/&lt;^&gt;example.com&lt;^&gt;

				
			

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

				
					
[label /etc/nginx/sites-available/example.com]

server {

        listen 80;

        listen [::]:80;



        root /var/www/&lt;^&gt;example.com&lt;^&gt;/html;

        index index.html index.htm index.nginx-debian.html;



        server_name &lt;^&gt;example.com&lt;^&gt; www.&lt;^&gt;example.com&lt;^&gt;;



        location / {

                try_files $uri $uri/ =404;

        }

}

				
			

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

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

				
					
sudo ln -s /etc/nginx/sites-available/&lt;^&gt;example.com&lt;^&gt; /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 и удалите символ # для того, чтобы раскомментировать её:

				
					
[label /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 будут записываться в этот файл.

Заключение

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

Если вы хотите использовать более полный стек приложений, рекомендуем ознакомиться с нашим руководством по настройке стека LEMP на сервере с Ubuntu 18.04.