Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Вы задумывались о том, чтобы разместить несколько сайтов на одном сервере, но не знаете, с чего начать? Nginx позволяет это сделать легко и эффективно, используя мощный инструмент — виртуальные хосты.

Это не просто теория, а практическое руководство, которое выведет ваши навыки администрирования на новый уровень. Мы разберем процесс от А до Я, без лишней воды и сложных терминов.

Вы научитесь создавать отдельные конфигурации для каждого вашего проекта. Поймете, как заставить сервер реагировать на разные доменные имена. Узнаете о правильной структуре папок для идеального порядка.

Мы начнем с основ синтаксиса блока `server`. Разберемся, что такое `listen`, `server_name` и `root`. Вы увидите, как эти директивы управляют поведением вашего веб-сервера.

Затем вы создадите свой первый виртуальный хост по умолчанию. Он будет ловить все запросы, для которых не найдено другое правило. Это ваш надежный фундамент.

Следующий шаг — хост для конкретного домена. Вы настроите его для `example.ru` и поймете принцип работы. Мы даже покажем, как протестировать это на локальной машине без покупки домена.

А что, если сайт нужно временно отключить? И это просто! Вы узнаете, как правильно деактивировать хост, не удаляя его конфигурацию, чтобы в любой момент вернуть его к жизни.

Мы затронем и практические команды для проверки конфигурации. Убедитесь, что всё работает идеально, прежде чем применять изменения на рабочем сервере.

Готовы превратить ваш сервер в мощную многозадачную платформу? Всё необходимое ждет вас в полной версии статьи. Переходите и начните применять эти знания уже сегодня!


В одной из прошлых статей мы говорили о том, как выполняется установка и первоначальная настройка веб-сервера Nginx в CentOS 7. Этот веб-сервер завоевал огромную популярность благодаря высокой производительности и удачной архитектуре самой программы, из-за которой такая производительность и стала возможной.

Одна из основных возможностей веб-сервера - обслуживание нескольких сайтов на одном IP-адресе и в одной программе. Эта функция реализована с помощью виртуальных хостов. В этой статье мы разберём, как выполняется настройка виртуальных хостов в Nginx. Прежде чем читать статью дальше, я рекомендую просмотреть статью настройка Nginx, чтобы понять общий синтаксис конфигурационного файла.


Содержание статьи

Настройка виртуального хоста Nginx

Вообще, у Nginx только один конфигурационный файл - это /etc/nginx/nginx.conf. Все остальные файлы из папки /etc/nginx/* подключаются в этот файл с помощью директивы include. Поэтому теоретически все виртуальные хосты или только часть из них могут быть размещены в этом файле. Однако так делать не рекомендуется.

Для этого уже существует папка /etc/nginx/sites-available/ и /etc/nginx/sites-enabled. Первая просто содержит файлы конфигурации, в каждом из которых находится отдельный виртуальный хост. Вторая папка содержит ссылки на файлы из /etc/nginx/sites-available и подключена к основному конфигурационному файлу. Даже если в вашей системе пока такая структура не используется, я рекомендую её создать, чтобы в конфигурации всегда был порядок.

1. Синтаксис виртуального хоста

Каждый виртуальный хост представляет из себя такой блок кода:

server {
listen ip_адрес:порт;
server_name доменные_имена;
root /путь/к/файлам/сайта/;
index index.php index.html;
....
location / {}
....
}

Кроме того, здесь могут использоваться и другие инструкции, но эти основные и обязательные.

  • listen - указывает на IP-адрес и порт, на котором программа будет ожидать соединения от этого сайта. Чтобы выбрать любой IP-адрес, можно указать звёздочку, а порт указывать обязательно. Также в этой строке можно добавить параметр default_server, тогда этот виртуальный хост будет использоваться по умолчанию;
  • server_name - доменные имена, на которые будет отзываться этот хост. При отправке запроса на сервер, браузер указывает, к какому домену он обращается. Nginx анализирует этот параметр и выбирает необходимый виртуальный хост. Чтобы обрабатывать все домены, используйте символ подчеркивания _;
  • root - путь к файлам сайта, которые будут открываться при запросе к этому виртуальному хосту. У Nginx должен быть доступ на чтение ко всем папкам по этому пути;
  • index - файлы, которые будут открываться, если адрес файла не указан в URL;
  • location - это набор правил обработки путей в url. Каждый location может содержит путь URL а внутри него можно настроить открытие другого файла, аутентификацию, запрос к другому серверу и другие подобные вещи. Nginx анализирует все location в конфигурационном файле и выбирает самое подходящее. Из этого правила есть одно исключение. Если несколько location содержат регулярные выражения, то для обработки будет выбран первый подходящий.

2. Виртуальный хост по умолчанию

Теперь разберём создание виртуальных хостов nginx на примере. Давайте создадим виртуальный хост, который будет обрабатывать все необработанные запросы:

sudo vi /etc/nginx/sites-available/000-default.conf

server {
listen *:80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.html index.htm;
location / {}

Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Все директивы, которые используются в блоке server, могут использоваться и в блоках location. Но нам не обязательно указывать root и index в каждом location. Если их опустить, то будут наследоваться те, которые были указаны в родительском блоке. Блоки server ведут себя аналогичным образом, поэтому, если мы не укажем другой путь к access.log, то будет использоваться путь, указанный в /etc/nginx/nginx.conf и так далее.

Теперь нам нужно активировать созданный виртуальный хост nginx. Для этого создайте символическую ссылку:

sudo ln -s /etc/nginx/sites-available/000-default.conf /etc/nginx/sites-enabled/000-default.conf

Затем убедитесь, что файлы из этого каталога подключены в основном конфигурационном файле:

sudo vi /etc/nginx/nginx.conf

Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Затем выполните эту команду, чтобы убедится, что вы не допустили ошибок:

nginx -t

Далее перечитайте конфигурацию nginx:

nginx -s reload

Теперь, если вы откроете IP-адрес сервера, то откроется созданный нами виртуальный хост.

2. Виртуальный хост с доменом

Аналогичным образом можно создать виртуальный хост для домена. Например example.ru:

sudo vi /etc/nginx/sites-available/example.conf

server {
listen *:80;
server_name example.ru;
root /usr/share/nginx/html;
index index.html index.htm;
location / {}
}

Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Если вы работаете на локальной машине и доступа к DNS выбранного домена у вас нет, то надо добавить его IP в файл /etc/hosts:

sudo vi /etc/hosts

127.0.0.1 example.ru

Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Повторите процедуру активации домена, и затем в браузере при запросе к домену example.ru откроется стартовая страница Nginx. Если по каким-либо причинам виртуальный хост Nginx не работает, вы можете посмотреть полный скомпилированный файл nginx.conf:

nginx -T

Хостим несколько сайтов на одном сервере: Полное руководство по виртуальным хостам Nginx

Также можно проверить, есть ли в нём конфигурация нужного хоста, например, ищем упоминания example.ru:

nginx -T | grep example.ru

3. Отключение виртуального хоста

Благодаря структуре директорий, которую мы использовали, будет довольно просто отключить ненужный хост. Все наши виртуальные хосты Nginx находятся в папке /etc/nginx/sites-available, а в активной папке только ссылки на эти файлы. Поэтому для удаления достаточно удалить на него ссылку из папки /etc/nginx/sites-enabled/:

rm /etc/nginx/sites-enabled/001-example.conf

А затем, при необходимости, мы можем активировать его обратно, просто создав ссылку.

Выводы

В этой статье была рассмотрена настройка виртуальных хостов Nginx. Как видите, всё довольно просто и очень удобно, особенно, если вам нужно иметь несколько сайтов на одной машине. Конечно, у Nginx нет таких удобных утилит для активации сайтов, как в Apache, но работать вполне можно.

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив