Настройка веб-сервера 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.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:
- В каталоге
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-адресу.