Практическое задание

Эта задача — шаг 13 курса «Основы nginx»

Отдаётся не тот сайт

сложно~15 мин

На сервере два виртуальных хоста: приложение app.local (/var/www/app) и legacy-заглушка legacy.local (/var/www/legacy). Запрос на http://localhost/ возвращает legacy-страницу вместо приложения. Сделай так, чтобы на запросы с любым незнакомым именем хоста отвечало приложение, а legacy-сайт продолжал открываться по своему имени.

Что потренируешь:
  • nginx
  • default_server
  • server_name
  • nginx -T
  • виртуальные хосты

Разбор темы

Выбор server-блока в nginx идёт по заголовку Host: сначала точное совпадение server_name, затем маски и регулярные выражения, и лишь если ничего не совпало — блок с пометкой default_server для данного listen. Пометка задаётся один раз на пару адрес:порт; двух default_server на одном порту nginx не допускает. Когда её не проставили явно, по умолчанию им становится первый загруженный блок, а порядок загрузки определяется алфавитным порядком файлов в sites-enabled — из-за чего добавление файла с «ранним» именем молча меняет поведение. Итоговую конфигурацию со всеми подключениями показывает nginx -T.

Что проверяется

  1. по умолчанию отдаётся приложение
  2. по своему имени приложение тоже открывается
  3. legacy-сайт открывается по своему имени

Как это выглядит