Практика. Настройка Nginx в GNU/Debian
Документация
- Официальная документация по Nginx на русском языке
 - Официальное руководство для администраторов на английском языке
 - Официальное руководство для начинающих на русском языке
 
Краткое описание
В современном мире самой распространённой платформой для получения доступа к приложениям и службам является веб-браузер. Это приложение доступно на всех целевых платформах, следовательно не возникает никаких ограничений по доступу к самой веб-службе.
Если мы рассмотрим минимальный список служб для организации работы небольшой компании по разработке ПО, то в него будут входить:
- Трекер задач.
 - Система управления репозиториями, включающая средства для выполнения рецензий.
 - Система управления пользователями.
 - Система непрерывной интеграции.
 
Большинство из этих систем в первую очередь реализованы как веб-приложения. Большая часть из них не предоставляет альтернативного способа для выполнения действий кроме как общение через веб-интерфейс.
За редким исключением данные элементы обычно реализованы набором веб-приложений. Данные приложения обычно располагаются на одном или нескольких физических серверах.
Следует также рассмотреть типичное веб-приложение, которое состоит неизменяемого и динамического содержимого. Неизменяемое содержимое обычно раздаётся выделенными веб-серверами. Динамическое содержимое предоставляется самим приложением.
Назначение веб-серверов
Изначальной задачей веб-серверов было предоставление статической информации с жёсткого диска. Затем появилась поддержка динамического содержимого с помощью технологии CGI. Затем появилась поддержка технологии «обратного проксирования», когда запросы передаются для обработки во внешнее по отношению к веб-серверу приложению.
В разработку веб-серверов вложено огромное количество усилий, в результате чего данные приложения:
- Поддерживают огромное количество стандартов.
 - Имеют гибкие настройки производительности.
 - Минимальное количество проблем с безопасностью, быстрые исправления.
 
Ввиду этого для разворачивания современных веб-приложений требуется:
- запустить само веб-приложение для предоставления динамического содержимого;
 - запустить и настроить внешний веб-сервер, который будет отвечать за раздачу статического содержимого.
 
Доступеные веб-сервера
Веб-сервер может поставляться как отдельное приложение, так и через средства доставки дистрибутива. В составе дистрибутива GNU/Debian можно поставить следующие веб-сервера:
У них есть свои плюсы и минусы. Мы с вами рассмотрим веб-приложение nginx, так как данный сервер достаточно распространён и формат его конфигурационного файла понятен программистам, знакомым с Си-подобными языками программирования. Однако поставленные задачи можно решать и с помощью других серверов. Рекомендуется ознакомиться с их возможностями и форматом конфигурационных файлов самостоятельно.
Установка и настройка сервера nginx в GNU/Debian
Установка
Полная версия nginx, включающая в себя большую часть модулей, входит в пакет nginx-full.
Контроль службы
Служба nginx управляется с помощью systemd. Файл конфигурации располагается по пути /lib/systemd/system/nginx.service.
Конфигурационные файлы
Ключевой файл конфигурации nginx находится по пути /etc/nginx/nginx.conf. Данный файл является структурным, он подключает в себя другие файлы. Местоположение подключаемых файлов определяется с помощью директивы include.
Подключение происходит также из следующих каталогов:
- Общий контекст: 
/etc/nginx/modules-enabled/*.conf - Контекст 
http-сервера:/etc/nginx/conf.d/*.conf/etc/nginx/sites-enabled/*
 
Далее рекомендуется прочитать о формате конфигурационного файла nginx: Официальное руководство для начинающих на русском языке.
Аспекты конфигурации
/etc/nginx/conf.d- общие конфигурационные параметры. Тут надо поместить файл, если вы хотите внести исправления в базовую конфигурацию nginx./etc/nginx/modules-enabled- модули, которые надо включить в конфигурацию nginx. Содержит символические ссылки на файлы в каталоге/etc/nginx/modules-available, а не сами файлы. Это позволяет легко включать и отключать части конфигурации без необходимости реального удаления данных./etc/nginx/sites-available- конфигурации виртуальных серверов, файлы формата nginx, для конкретных сайтов, которые должен обслуживать nginx./etc/nginx/sites-enabled- ссылки на активные конфигурации виртуальных серверов, которые должны войти в финальную конфигурацию nginx.
Для проверки конфигурационного файла используйте команду nginx -t
Внимание! Не следует изменять файлы в каталогах sites-available и modules-available, если вы их не создавали. Вместо этого сделайте копию файла и подмените ссылку на данный файл в соответствующем каталоге sites-enabled и modules-enabled.
Поддержка нескольких доменных имён
Зачастую веб-сервер обслуживает доступ с нескольких доменных имён одновременно. Для каждого доменного имени создаётся собственная конфигурация, начинающаяся со слова server.
В рамках конфигурации виртуального сервера необходимо указать какое доменное имя обслуживается сервером. Для этого используется директива server_name. Если в качестве одного из имён сервера указан _, то данная конфигурация будет считаться конфигурацией по умолчанию. Обращение к ней будет происходить если ни одна другая конфигурация не обработала запрос.
С точки зрения настроек nginx в GNU/Debian рекомендуется настройки для каждого отдельного доменного имени располагать в отдельных файлах.
Настройка виртуальной машины
Зайдите в настройки сетевых интерфейсов виртуальной машины:
- Выберите виртуальную машину.
 - Откройте настройки машины, выбрав пункт меню «Машина»->«Настроить».
 - Выберите в боковом меню пункт «Сеть».
 
Если в настройках виртуального адаптера выбран тип подключения «Сетевой мост», то дополнительных настроек выполнять не нужно.
Для доступа к веб-серверу надо будет использовать ссылку http://IP-OF-VM, где IP-OF-VM - это ip-адрес виртуальной машины.
Если в настройках виртуального адаптера выбран тип подключения «NAT», то необходимо добавить правило для проброса порта.
- Откройте дополнительные настройки, нажав на пункт «Дополнительно».
 - Откройте список пробрасываемых портов, нажав на кнопку «Проброс портов».
 - Добавьте новое правило, нажав на кнопку плюс в правом-верхнем углу.
 - Укажите параметры проброса:
    
- Название: Доступ по протоколу HTTP
 - Протокол: TCP
 - Порт хоста: 8088
 - Порт гостя: 80
 
 - Сохраните настройки, нажав на кнопки «ОК» в обоих диалоговых окнах.
 
Для доступа к веб-серверу надо будет использовать ссылку http://localhost:8088 или http://127.0.0.1:8088
Задачи
Установка nginx
Установите nginx.
Настройка раздачи статического содержимого
В рамках данной задачи необходимо настроить раздачу статического содержимого сайта. В качестве примера такого сайта будем использовать шаблон Zurb Foundation, доступный с официального сайта.
Разместите содержимое статического сайта в каталоге /var/www/my-site
- Скачайте шаблон.
 - Распакуйте архив.
 - Поместите содержимое архива в каталог 
/var/www/my-siteтаким образом, чтобы файлindex.htmlрасполагался в данном каталоге. 
Настройте nginx на предоставление этого сайта по умолчанию:
- Уберите ссылку на 
defaultизsites-enabled. - Скопируйте 
defaultвmy-siteв каталогеsites-available. - Добавьте символическую ссылку на 
my-siteвsites-enabled. - Настройте конфигурационный файл nginx 
my-siteтак, чтобы корневым каталогом сайта был/var/www/my-site. - Проверьте корректность конфигурации nginx.
 - Перезапустите SystemD-службу 
nginx. - Обратитесь к вашей виртуальной машине. Она должна предоставлять шаблон Foundation.
 
Обработка нескольких доменных имён
В рамках данной задачи вам необходимо будет модифицировать настройки компьютера, с которого вы подключаетесь к веб-серверу. Внимание это надо сделать на клиенте, а не на сервере!
Добавьте в файл hosts для нашего сервера следующие DNS-имена:
- first-site.local
 - second-site.local
 
Информацию по настройке hosts-файла в ОС Windows и GNU/Linux можно прочитать в данном руководстве.
В каталогах /var/www/first-site.local и /var/www/second-site.local разместите различные документы index.html. Если вы поместите одинаковый файл, то вы не сможете понять корректно ли настроен nginx или нет.
Добавьте для каждого из этих сайтов настройки в nginx:
- В каталоге 
sites-availableсоздайте копиюdefaultс именемfirst-site.local. - Отредактируйте данный файл, так, чтобы
    
- Он обрабатывал запросы к доменному имени 
first-site.local - Корневым каталогом для него являлся 
/var/www/first-site.local 
 - Он обрабатывал запросы к доменному имени 
 - Добавьте ссылку на созданный файл в каталог 
sites-enabled - Проверьте конфигурацию nginx.
 - Перезапустите SystemD-службу 
nginx. - Откройте сайт
    
- Для прямого соединения с виртуальной машиной: http://first-site.local
 - Для соединения через NAT: http://first-site.local:8088
 
 
Повторите процедуру для second-site.local.
Удостоверьтесь, что все 3 сайта корректно функционируют в рамках виртуальной машины.