Настройка веб-сервера 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
- Скачайте шаблон.
 - Распакуйте архив.
 - Поместите содержимое архива в каталог 
/var/www/my-siteтаким образом, чтобы файлindex.htmlрасполагался в данном каталоге. 
Настройте nginx на предоставление этого сайта по умолчанию:
- Скопируйте 
default.confвmy-site.confв каталогеsites-available.d. - Добавьте символическую ссылку на 
my-site.confвsites-enabled.d. - Настройте конфигурационный файл nginx 
my-site.confтак, чтобы- Он обслуживал запросы с любого IP-адреса по порту 80
 - Корневым каталогом сайта был 
/var/www/my-site. 
 - Проверьте корректность конфигурации nginx.
 - Перезапустите SystemD-службу 
nginx. - Обратитесь к вашей виртуальной машине. Она должна предоставлять шаблон Foundation.
 
3. Обработка нескольких доменных имён #
В рамках данной задачи вам необходимо будет модифицировать настройки компьютера, с которого вы подключаетесь к веб-серверу. Внимание это надо сделать на клиенте, а не на сервере!
Добавьте в файл hosts для нашего сервера следующие DNS-имена:
first-site.localsecond-site.local
Информацию по настройке hosts-файла в ОС Windows и GNU/Linux можно прочитать в данном руководстве.
Внимание в рамках компьютерных классов данная функциональность не доступна. Вместо указанных выше имён предлагается использовать доменные имена localhost и localhost.localdomain. Они уже настроены в локальном файле конфигурации и указывают на текущий компьютер.
В каталогах /var/www/first-site.local и /var/www/second-site.local разместите различные документы index.html. Если вы поместите одинаковый файл, то вы не сможете понять корректно ли настроен nginx или нет.
Добавьте для каждого из этих сайтов настройки в nginx:
- В каталоге 
sites-available.dсоздайте копиюdefault.confс именемfirst-site.local.conf. - Отредактируйте данный файл, так, чтобы
- Он обрабатывал запросы к доменному имени 
first-site.local(localhost). - Корневым каталогом для него являлся 
/var/www/first-site.local 
 - Он обрабатывал запросы к доменному имени 
 - Добавьте ссылку на созданный файл в каталог 
sites-enabled.d - Проверьте конфигурацию nginx.
 - Перезапустите SystemD-службу 
nginx. - Откройте сайт
- Для прямого соединения с виртуальной машиной: http://first-site.local
 - Для соединения через NAT: http://first-site.local:8088
 - В рамках университета: http://localhost:2080
 
 
Повторите процедуру для second-site.local.
Удостоверьтесь, что все 3 сайта корректно функционируют в рамках виртуальной машины. Для университета первая версия сайта должна открываться при обращении по IP-адресу.