Настройка виртуальных хостов в Nginx на Ubuntu 14.04
Требования
Будем работать под учетной записью обычного пользователя с sudo правами. Так же вам понадобится установленный веб-сервер Nginx. При желании можно установить полностью LEMP (Linux, Nginx, MySQL и PHP). Чтобы установить Nginx достаточно выполнить следующую команду:
Прежде чем продолжить читать статью, настоятельно рекомендуем выполнить вышеописанные условия. Для примера, мы настроим два домена на нашем сервере. Их имена — example. com, test. com. Если в наличии у вас нет двух свободных имен, то просто придумайте два, а позднее мы покажем как настроить ваш локальный сервер, чтобы проверить их работоспособность.
Шаг 1 — настройка новой корневой директории
По-умолчанию на вашем Nginx сервере активирован только один виртуальный хост. Он работает с документами по адресу: /usr/share/nginx/html. Мы изменим эту настройку, так как чаще всего приходится работать с каталогом /var/www. Nginx не использует эту директорию по-умолчанию, так как это противоречит политике Debian по использованию пакетов в каталоге /var/www .
Но так как мы простые пользователи, и с вопросами хранения пакетов редко сталкиваемся, проигнорируем эту политику и установим этот каталог в качестве корневого. Точнее говоря, каждый каталог внутри корневой директории должен соответствовать отдельному сайту. А все файлы сайта разместим в директории /var/www/site_name/html. Сначала создадим все необходимые подкаталоги. Для этого выполним следующую команду:
Флаг — р указывает оболочке, чтобы она создавала новые каталоги если их не существует в указанном пути. Теперь передадим права на этот каталог обычному пользователю. Воспользуемся переменной окружения $USER. чтобы не вводить имя своего аккаунта. После этих действий мы сможем создавать в каталоге /var/www/ файлы, а посетители сайта — нет.
Права на корневой каталог должны быть настроены корректно если вы не исправляли значение umask. но на всякий случай поправим:
Мы полностью подготовили структуру для нашего сервера, можем двигаться дальше.
Шаг 2 — Создаём шаблон страницы для каждого сайта
Давайте создадим страницу, которая будет отображаться по-умолчанию при создании нового сайта. Создайте файл index. html в каталоге первого домена:
Внутри сделаем минимальное наполнение, чтобы понимать на каком сайте мы находимся. Вот примерное содержание:
Сохраните и закройте файл. Так как второй файл будет с похожим содержанием, просто скопируем его:
Внесём в него небольшие изменения:
Сохраните и закройте этот файл. Теперь мы будем видеть правильно ли настроены наши сайты.
Шаг 3 — создание файлов виртуальных хостов для каждого домена
Теперь у нас есть содержимое для каждого сайта, настало время создать виртуальный хосты (точнее в Nginx они называются server block, но мы будет пользоваться термином виртуальный хост). По-умолчанию, Nginx использует один виртуальный хост под названием default. Используем его в качестве шаблона для нашей конфигурации. Сначала проработаем настройку для первого домена, которую потом просто скопируем и внесем минимальные изменения для второго домена.
Создание первого файла виртуального хоста
Как я уже сказал, скопируем файл настройки default :
Откроем этот файл с правами администратора:
Если опустить комментарии, то файл должен выглядеть следующим образом:
Для начала разберемся с директивой listen. Только одному блоку server мы можем установить значение default_server. Блок с таким значением будет обслуживать запросы, если не было найдено подходящего блока (блок — это всё что находится в server). Мы отключим эту директиву в виртуальном хосте default. чтобы использовать default_server на одном из наших доменов. Я оставлю эту функцию активированной для первого домена, но при желании вы можете её перенести на второй.
Следующее что мы сделаем — настроим корневой каталог при помощи директивы root. Она должна указывать на каталог, где лежат все документы вашего сайта:
Заметка. каждая инструкция Nginx должна заканчиваться символом “;”.
Далее настроим server_name. эта директива должна соответствовать первому доменному имени. Добавим также псевдоним:
Окончательная настройка должна выглядеть следующим образом:
На этом базовая настройка окончена. Сохраните и закройте файл.
Создание второго виртуального хоста
Для этого просто скопируем файл настроек для первого сайта:
Откройте этот файл с правами администратора
В этом файле также начнем с директивы listen. Если опцию default_server вы оставили в первом файле, то здесь её следует удалить. Также необходимо убрать опцию ipv6only=on, так как её указывают только для одной комбинации адрес/порт:
Установите корневой каталог для второго сайта:
Теперь укажем server_name для второго домена:
Окончательная настройка должна выглядеть следующим образом:
Сохраните и закройте файл.
Шаг 4 — активация виртуальных хостов и перезапуск Nginx
Мы настроили наши виртуальные хосты, теперь настало время активировать их. Для этого надо создать символические ссылки на эти файлы и положить их в каталог sites-enabled. которые Nginx считывает при запуске. Создать ссылки можно следующей командой:
Теперь Nginx обработает эти файлы. Но виртуальный хост default. также активирован, поэтому мы получим конфликт параметра default_server. Отключить эту настройку можно просто удалив ссылку на файл. Сам файл останется в каталоге sites-available. так что при необходимости мы всегда сможем вернуть его на место.
Осталось ещё одна настройка, которую требуется выполнить в конфигурационном файле Nginx. Откройте его:
Надо снять комментарий с одной из строк:
Эта директива применяется когда задано большое число имён серверов, либо заданы необычно длинные имена. Например, если значение по умолчанию равно 32 и имя сервера задано как “too. long. server. name. example. org”, то nginx откажется запускаться и выдаст сообщение об ошибке:
Поэтому лучше увеличить это значение до 64. Теперь можно перезапустить веб сервер, чтобы изменения вступили в силу:
Ваш сервер теперь должен обрабатывать запросы к обоим доменам.
Шаг 5 — Настройка локального файла hosts (дополнительно)
Если вы использовали свои доменные имена, то необходимо настроить ваш локальный сервер, чтобы тот распознавал их и вы смогли бы проверить свои виртуальные хосты (будем прописывать свои доменные имена в локальный файл hosts). Конечно, интернет пользователи не смогут таким образом просматривать ваш сайт, но для проверки хостов этого будет достаточно. Таким образом мы перехватываем запрос, который должен быть отправлен DNS серверу. По идее мы указываем по какому ip адресу наш компьютер должен перейти при обращении к определенному доменному имени.
Обратите внимание, что эти изменения следует производить только на локальной машине, а не на VPS сервере. Вам понадобятся root права, также необходимо иметь право изменять системные файлы.
Если вы используете Mac или Linux систему, то исправления можно внести следующим образом:
Если же вы пользуетесь Windows, то инструкции по этой ОС вы найдете на официальном сайте производителя (или в google). Вам необходимо знать открытый IP адрес вашего сервера и доменные имена, которые вы хотите привязать к нему. Допустим мой адрес 111.111.111.111. тогда мне надо добавить следующие строки в файл hosts :
Таким образом мы перехватим все запросы к этим доменным именам и перенаправим их на наш сервер. Сохраните и закройте файл когда закончите.
Шаг 6 — Проверка
На данном этапе вы должны получить полностью рабочую настройку. Осталось только её проверить. Для этого перейдем в браузере по адресу: http://example. com <:target="_blank">. Если оба сайта отображаются корректно, то вас можно поздравить с полной настройкой сервера Nginx. На этом этапе, если вы вносили изменения в файл hosts. то их следует удалить т. к. проверка прошла успешно и они уже не нужны. Чтобы открыть доступ к сайтам для интернет пользователей, придется приобрести доменные имена.
Заключение
Вы научились полностью настраивать виртуальные хосты для каждого сайта на вашем сервере. По сути, не существует каких либо ограничений на количество сайтов на одной машине, кроме ресурсов самой системы.