Настройка веб-сервера Nginx

Настройка веб-сервера nginx #

Документация #

Краткое описание #

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

Если мы рассмотрим минимальный список служб для организации работы небольшой компании по разработке ПО, то в него будут входить:

  • Трекер задач.
  • Система управления репозиториями, включающая средства для выполнения рецензий.
  • Система управления пользователями.
  • Система непрерывной интеграции.

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

За редким исключением данные элементы обычно реализованы набором веб-приложений. Данные приложения обычно располагаются на одном или нескольких физических серверах.

Следует также рассмотреть типичное веб-приложение, которое состоит неизменяемого и динамического содержимого. Неизменяемое содержимое обычно раздаётся выделенными веб-серверами. Динамическое содержимое предоставляется самим приложением.

Назначение веб-серверов #

Изначальной задачей веб-серверов было предоставление статической информации с жёсткого диска. Затем появилась поддержка динамического содержимого с помощью технологии CGI. Затем появилась поддержка технологии «обратного проксирования», когда запросы передаются для обработки во внешнее по отношению к веб-серверу приложению.

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

  • Поддерживают огромное количество стандартов.
  • Имеют гибкие настройки производительности.
  • Минимальное количество проблем с безопасностью, быстрые исправления.

Ввиду этого для разворачивания современных веб-приложений требуется:

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

Доступеные веб-сервера #

Веб-сервер может поставляться как отдельное приложение, так и через средства доставки дистрибутива. В составе дистрибутива GNU/Debian можно поставить следующие веб-сервера:

У них есть свои плюсы и минусы. Мы с вами рассмотрим веб-приложение nginx, так как данный сервер достаточно распространён и формат его конфигурационного файла понятен программистам, знакомым с Си-подобными языками программирования. Однако поставленные задачи можно решать и с помощью других серверов. Рекомендуется ознакомиться с их возможностями и форматом конфигурационных файлов самостоятельно.

Установка и настройка сервера nginx #

Установка #

Полная версия nginx, включающая в себя большую часть модулей, входит в пакет nginx.

Контроль службы #

Служба nginx управляется с помощью systemd. Файл конфигурации располагается по пути /lib/systemd/system/nginx.service.

Конфигурационные файлы #

Ключевой файл конфигурации nginx находится по пути /etc/nginx/nginx.conf. Данный файл является структурным, он подключает в себя другие файлы. Местоположение подключаемых файлов определяется с помощью директивы include.

Подключение происходит также из следующих каталогов:

  • Общий контекст: /etc/nginx/modules-enabled.d/*.conf
  • Контекст http-сервера:
    • /etc/nginx/conf.d/*.conf
    • /etc/nginx/sites-enabled.d/*

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

Аспекты конфигурации #

  • /etc/nginx/conf.d - общие конфигурационные параметры. Тут надо поместить файл, если вы хотите внести исправления в базовую конфигурацию nginx.
  • /etc/nginx/modules-enabled.d - модули, которые надо включить в конфигурацию nginx. Содержит символические ссылки на файлы в каталоге /etc/nginx/modules-available.d, а не сами файлы. Это позволяет легко включать и отключать части конфигурации без необходимости реального удаления данных.
  • /etc/nginx/sites-available.d - конфигурации виртуальных серверов, файлы формата nginx, для конкретных сайтов, которые должен обслуживать nginx.
  • /etc/nginx/sites-enabled.d - ссылки на активные конфигурации виртуальных серверов, которые должны войти в финальную конфигурацию nginx.

Для проверки конфигурационного файла используйте команду nginx -t

Внимание! Не следует изменять файлы в каталогах sites-available.d и modules-available.d, если вы их не создавали. Вместо этого сделайте копию файла и подмените ссылку на данный файл в соответствующем каталоге sites-enabled.d и modules-enabled.d.

Поддержка нескольких доменных имён #

Зачастую веб-сервер обслуживает доступ с нескольких доменных имён одновременно. Для каждого доменного имени создаётся собственная конфигурация, начинающаяся со слова server.

В рамках конфигурации виртуального сервера необходимо указать какое доменное имя обслуживается сервером. Для этого используется директива server_name. Если в качестве одного из имён сервера указан _, то данная конфигурация будет считаться конфигурацией по умолчанию. Обращение к ней будет происходить если ни одна другая конфигурация не обработала запрос.

С точки зрения настроек nginx в GNU/Debian рекомендуется настройки для каждого отдельного доменного имени располагать в отдельных файлах.

Настройка адреса сервера #

Базовая конфигурация сайта nginx включает в себя возможность подключения к серверу только с локального компьютера. Это настраивается с помощью директивы listen. Её следует изменить, чтобы сервер принимал подключения с любых IP-адресов.

Настройка виртуальной машины #

Данную настройку необходимо выполнять на домашних машинах. В компьютерном классе порт 80 уже доступен. Информация о связи 80 порта виртуальной машины с портом основного компьютера находится в выводе скрипта по запуску виртуальной машины.

Зайдите в настройки сетевых интерфейсов виртуальной машины:

  • Выберите виртуальную машину.
  • Откройте настройки машины, выбрав пункт меню «Машина»->«Настроить».
  • Выберите в боковом меню пункт «Сеть».

Если в настройках виртуального адаптера выбран тип подключения «Сетевой мост», то дополнительных настроек выполнять не нужно.

Для доступа к веб-серверу надо будет использовать ссылку http://IP-OF-VM, где IP-OF-VM - это ip-адрес виртуальной машины.

Если в настройках виртуального адаптера выбран тип подключения «NAT», то необходимо добавить правило для проброса порта.

  • Откройте дополнительные настройки, нажав на пункт «Дополнительно».
  • Откройте список пробрасываемых портов, нажав на кнопку «Проброс портов».
  • Добавьте новое правило, нажав на кнопку плюс в правом-верхнем углу.
  • Укажите параметры проброса:
    • Название: Доступ по протоколу HTTP
    • Протокол: TCP
    • Порт хоста: 8088
    • Порт гостя: 80
  • Сохраните настройки, нажав на кнопки «ОК» в обоих диалоговых окнах.

Для доступа к веб-серверу надо будет использовать ссылку http://localhost:8088 или http://127.0.0.1:8088

Задачи #

1. Установка nginx #

Установите nginx.

2. Настройка раздачи статического содержимого #

В рамках данной задачи необходимо настроить раздачу статического содержимого сайта. В качестве примера такого сайта будем использовать шаблон Zurb Foundation, доступный с официального сайта.

Разместите содержимое статического сайта в каталоге /var/www/my-site

  1. Скачайте шаблон.
  2. Распакуйте архив.
  3. Поместите содержимое архива в каталог /var/www/my-site таким образом, чтобы файл index.html располагался в данном каталоге.

Настройте nginx на предоставление этого сайта по умолчанию:

  1. Скопируйте default.conf в my-site.conf в каталоге sites-available.d.
  2. Добавьте символическую ссылку на my-site.conf в sites-enabled.d.
  3. Настройте конфигурационный файл nginx my-site.conf так, чтобы
    1. Он обслуживал запросы с любого IP-адреса по порту 80
    2. Корневым каталогом сайта был /var/www/my-site.
  4. Проверьте корректность конфигурации nginx.
  5. Перезапустите SystemD-службу nginx.
  6. Обратитесь к вашей виртуальной машине. Она должна предоставлять шаблон Foundation.

3. Обработка нескольких доменных имён #

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

Добавьте в файл hosts для нашего сервера следующие DNS-имена:

  • first-site.local
  • second-site.local

Информацию по настройке hosts-файла в ОС Windows и GNU/Linux можно прочитать в данном руководстве.

Внимание в рамках компьютерных классов данная функциональность не доступна. Вместо указанных выше имён предлагается использовать доменные имена localhost и localhost.localdomain. Они уже настроены в локальном файле конфигурации и указывают на текущий компьютер.

В каталогах /var/www/first-site.local и /var/www/second-site.local разместите различные документы index.html. Если вы поместите одинаковый файл, то вы не сможете понять корректно ли настроен nginx или нет.

Добавьте для каждого из этих сайтов настройки в nginx:

  1. В каталоге sites-available.d создайте копию default.conf с именем first-site.local.conf.
  2. Отредактируйте данный файл, так, чтобы
    • Он обрабатывал запросы к доменному имени first-site.local (localhost).
    • Корневым каталогом для него являлся /var/www/first-site.local
  3. Добавьте ссылку на созданный файл в каталог sites-enabled.d
  4. Проверьте конфигурацию nginx.
  5. Перезапустите SystemD-службу nginx.
  6. Откройте сайт

Повторите процедуру для second-site.local.

Удостоверьтесь, что все 3 сайта корректно функционируют в рамках виртуальной машины. Для университета первая версия сайта должна открываться при обращении по IP-адресу.

© A. M. Васильев, 2022, CC BY-SA 4.0, andrey@crafted.su