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

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

В одной из прошлых статей мы говорили о том, как выполняется установка и первоначальная настройка веб-сервера 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 / {}
....
}

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

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, но работать вполне можно.

16-10-2025, 07:38
Вернуться назад