Введение

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

В этом обучающем модуле мы расскажем, как установить Nginx на сервере Debian 9.

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

nginx illustration for: Предварительные требования

Для прохождения этого обучающего модуля вам потребуется настроенный на сервере пользователь без привилегий root с привилегиями sudo, а также активный брандмауэр. Подробнее об этом можно узнать в обучающем модуле Начальная настройка сервера для Debian 9.

Создав учетную запись, войдите в систему как пользователь без привилегий root.

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

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

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

				
					
sudo apt update

sudo apt install nginx

				
			

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

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

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

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

				
					
sudo ufw app list

				
			

Необходимо получить список профилей приложений:

				
					
[secondary_label Output]

Available applications:

...

  Nginx Full

  Nginx HTTP

  Nginx HTTPS

...

				
			

Как видите, для 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 разрешен:

				
					
[secondary_label 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 — Проверка веб-сервера

В конце процесса установки Debian 9 запускает Nginx. Веб-сервер уже должен быть запущен и работать.

Используйте команду systemd init system, чтобы проверить работу службы:

				
					
systemctl status nginx

				
			
				
					
[secondary_label 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 Tue 2018-09-04 18:15:57 UTC; 3min 28s ago

     Docs: man:nginx(8)

  Process: 2402 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)

  Process: 2399 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)

 Main PID: 2404 (nginx)

    Tasks: 2 (limit: 4915)

   CGroup: /system.slice/nginx.service

           ├─2404 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;

           └─2405 nginx: worker process

				
			

Как видно из результатов выполнения команды, служба успешно запущена. Однако лучше всего протестировать ее запуск посредством запроса страницы из Nginx.

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

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

				
			

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

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

				
					
http://<^>your_server_ip<^>

				
			

Вы увидите начальную страницу 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, но вы должны заменить это имя собственным доменным именем. Чтобы узнать больше о настройке доменного имени с помощью the cloud provider, см. наше руководство Введение в DNS hosting.

В Nginx на Debian 9 по умолчанию включен один серверный блок, настроенный для вывода документов из директории /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, не соответствующие двум другим блокам.

Чтобы избежать возможной проблемы с хэшированием памяти при добавлении дополнительных имен серверов, необходимо изменить одно значение в файле /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

				
			

Если проблем нет, вы увидите на экране следующие результаты:

				
					
[secondary_label Output]

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

				
			

После тестирования конфигурации перезапустите Nginx для активации изменений:

				
					
sudo systemctl restart nginx

				
			

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

Шаг 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 будут регистрироваться в этом журнале.

Заключение

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