После установки популярного веб-сервера nginx (Engine-X, «Энжин-кс»), необходимо настроить виртуальные хосты. С помощью них можно обслуживать нескольких сайтов на одном IP-адресе.
Виртуальный хост (virtual Host) - это конфигурационный файл, в котором описаны настройки одного веб-сайта (домена).
Предполагается, что веб-сервер уже установлен, при большом желании рекомендуется установить весь необходимый комплект Nginx, MySQL и PHP. Вместо Mysql можно использовать аналоги, например mariadb, однако в этой статье мы не будет касаться php и базы sql.
Для примера создадим два виртуальных хоста:
- vseprolinux.ru
- siteprimer.ru
Содержание
Настройка корневой системы для сайтов
Сделаем удобную корневую систему сайтов таким образом, что каждый каталог соответствует названию сайта.
И все файлы будут храниться в директории "/var/www/название домена/html".
Создадим каталоги для двух доменов: vseprolinux.ru; siteprimer.ru.
mkdir -p /var/www/vseprolinux.ru/html
mkdir -p /var/www/siteprimer.ru/html
Аргумент "-p" говорит, чтобы директории создавались в любом случаи, если даже их не существует.
Права на html
Передадим права на папку html обычному пользователю, таким образом, чтобы мы могли создавать новые элементы, а пользователи сайта - нет.
Для этого будем использовать переменную окружения "$USER", чтобы не вводить имя своего логина.
chown -R $USER:$USER /var/www/vseprolinux.ru/html
chown -R $USER:$USER /var/www/siteprimer.ru/html
Права на каталог www.
chmod -R 755 /var/www
Создание простой html страницы для сайта
Создадим файл index.html для сайта vseprolinux.ru. Поместим его в рабочей каталог.
touch /var/www/vseprolinux.ru/html/index.html
Отредактируем его, с минимальным html контентом.
mcedit /var/www/vseprolinux.ru/html/index.html
<html>
<head>
<title>Добро пожаловать на vseprolinux.ru!</title>
</head>
<body>
<h1>Это заголовок сайта vseprolinux!</h1>
</body>
</html>
Далее для второго сайта делаем тоже самое.
mcedit /var/www/siteprimer.ru/html/index.html
В файл вставляем примерный код:
<html>
<head>
<title>Добро пожаловать на siteprimer!</title>
</head>
<body>
<h1>Это заголовок сайта siteprimer!</h1>
</body>
</html>
Создание первого файла server block (виртуального хоста) конфигурации
В отличие от apache в nginx виртуальные хосты называются server block.
Из коробки на веб-сервере активирован только один виртуальный хост (server block) - "default" . Находится он "/etc/nginx/sites-available/defaul".
Будем использовать его в качестве шаблона для двух сайтов.
Для начала скопируем дефолтный файл в новый веб-сайт.
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/vseprolinux.ru
Отредактируем default.
mcedit /etc/nginx/sites-available/vseprolinux.ru
Немного о параметрах конфига.
listen - указывает на IP-адрес и порт на который программа или сайт будет слушать. Здесь можно указать default_server - тогда этот server block будет использоваться по умолчанию.
ВАЖНО! Только для одного виртуального хоста можно установить значение default_server.
Для примера, установим параметр default_server для первого веб-сайта, однако его можно перенести на любой другой веб-сайт или оставить в default.
listen 80 default_server;
server_name - доменные имена, на которые будет отзываться сайт. Добавим название веб-сайта с www и без.
server_name vseprolinux.ru vseprolinux.ru;
root - полный путь к файлам виртуального хоста.
Укажем корневой каталог первого веб-сайта.
Заменим:
root /var/www/html;
На:
root /var/www/vseprolinux/html;
Итоговый файл с конфигурацией выглядит так:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/vseprolinux.ru/html;
index index.html index.htm;
server_name vseprolinux.ru vseprolinux.ru;
location / {
try_files $uri $uri/ =404;
}
}
Сохраните файл.
На этом первичная настройка первого веб-сайта закончена. Далее переходим ко второму сайту.
Создание второго файла server block (виртуального хоста) конфигурации
Копируем дефолтный файл настроек для второго веб-сайта.
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/siteprimer.ru
Редактируем файл siteprimer.ru
nano /etc/nginx/sites-available/siteprimer.ru
Из "listen" убираем опцию "default_server", так как она стоит для первого сайта. Убираем ipv6only=on.
Укажем коневой каталог.
root /var/www/siteperimer.ru/html;
Установим server_name
server_name siteprimer.ru www.siteprimer.ru;
Итоговая конфигурация второго веб-сайта:
server {
listen 80;
listen [::]:80;
root /var/www/siteprimer.ru/html;
index index.html index.htm;
server_name siteprimer.ru www.siteprimer.ru;
location / {
try_files $uri $uri/ =404;
}
}
Активация
После настройки конфигурации для виртуальных хостов (server block), необходимо активировать их.
В веб-сервере есть два каталога sites-available и sites-enabled.
В sites-available хранятся конфигурации всех хостов.
В sites-enabled - символические ссылки, которые веб-сервер считывает при загрузки.
Создадим ссылки для каталога sites-enabled.
ln -s /etc/nginx/sites-available/vseprolinux.ru /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/siteprimer.com /etc/nginx/sites-enabled/
Теперь при запуске веб-сервера, nginx активирует символические ссылки. Однако, хост default еще активирован и мы на выходе получим ошибку, так как параметр default_server запущен два раза.
Первый раз в конфиге default, второй в vseprolinux.ru.Убрать это ошибку просто - удалим символическую ссылку default из каталога sites-enabled, тем самым server block не будет активироваться.
rm /etc/nginx/sites-enabled/default
Далее открываем главный конфиг nginx.conf
nano /etc/nginx/nginx.conf
Нужно раскомментировать (убрать #) строчку:
server_names_hash_bucket_size: 64;
Параметр server_names_hash_bucket_size устанавливает размер корзины в хэш-таблицах имен серверов.
Перезапускаем сервис.
service nginx restart