Настройка virtual hosts на веб сервере Nginx называется server blocks (термин virtual hosts используется в веб сервере Apache)
Дальше по тексту будет использовать термины nginx, т.е. server blocks.
Для настройки virtual hosts в Nginx нам нужен сервер (физический, виртуальный или живой VPS) с установленной операционной системой Ubuntu 16.04 serevr и установленным веб сервером Nginx.
В данном примере будем настраивать virtual hosts для двух вымышленных доменов test.com и virtual.com
Инструкция по настройке virtual hosts (виртуальных хостов) на Nginx в Ubuntu 16.04 server
Шаг № 1 Настройка главной директории
По умолчанию в Nginx на Ubuntu 16.04 главный каталог настроен в директорию /var/www/html
Создадим директории для каждого из доменов в папке /var/www
Выполним команды:
1 2 |
sudo mkdir -p /var/www/test.com/html sudo mkdir -p /var/www/virtual.com/html |
Настроим права доступа для всех папок и подпапок в директории /var/www командой:
1 |
sudo chmod -R 755 /var/www |
Структура для будущих сайтов test.com и virtual.com — готовы.
Шаг № 2 Создадим простую страницу для каждого из сайтов
Для каждого из сайтов создадим простую страниц вида index.html
Выполним следующую команду:
1 |
sudo nano /var/www/test.com/html/index.html |
В созданный файл добавим следующий текст:
1 2 3 4 5 6 7 8 9 10 11 |
<!DOCTYPE html> <html lang="ru-RU"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>test.com</title> </head> <body> <h1>Домен: test.com</h1> <h1>Виртуальный хост для сайта test.com - настроен</h1> </body> </html> |
Сохраняем файл и выходим.
Создаем такой же файл для сайт virtual.com
1 |
sudo nano /var/www/virtual.com/html/index.html |
И добавляем такой же текст. Меня только название домена
1 2 3 4 5 6 7 8 9 10 11 |
<!DOCTYPE html> <html lang="ru-RU"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>virtual.com</title> </head> <body> <h1>Домен: virtual.com</h1> <h1>Виртуальный хост для сайта test.com - настроен</h1> </body> </html> |
Сохраняем и выходим.
Шаг № 3 Настраиваем server blocks (virtual hosts) в Nginx
Для настроек virtual hosts возьмем за основу файл default, который по умолчанию уже есть в Nginx.
Создадим настройки для сайта test.com, выполнив следующую команду :
1 |
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/test.com |
После копирования файла из default в файл test.com внесем в него нужные правки и в итоге должны получить файл test.com следующего вида :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server { listen 80; listen [::]:80; root /var/www/test.com/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com www.test.com; location / { try_files $uri $uri/ =404; } } |
Сохраняем и закрываем файл.
Создаем файл настроек для сайт virtual.com скопировав уже готовый конфиг для сайт test.com командой:
1 |
sudo cp /etc/nginx/sites-available/test.com /etc/nginx/sites-available/virtual.com |
Откроем новый файл virtual.com для редактирования командой:
1 |
sudo nano /etc/nginx/sites-available/virtual.com |
И в несем в него правки, что бы получить файл такого вида:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
server { listen 80; listen [::]:80; root /var/www/virtual.com/html; index index.php index.html index.htm index.nginx-debian.html; server_name virtual.com www.virtual.com; location / { try_files $uri $uri/ =404; } } |
Шаг № 4 Активируем serever blocks (virtual hosts) и перезапускаем Nginx
Теперь когда файлы настроке для сайтов test.com и virtual.com готовы, сделаем их активными следующими командами:
1 2 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/virtual.com /etc/nginx/sites-enabled/ |
Чтобы избежать потенциальных проблем с памятью, которые могут возникнуть из-за дополнительных имён сервера, отредактируйте файл /etc/nginx/nginx.conf:
1 |
sudo nano /etc/nginx/nginx.conf |
Найдите директиву server_names_hash_bucket_size и раскомментируйте её:
1 2 3 4 5 6 7 |
http { . . . server_names_hash_bucket_size 64; . . . } |
Сохраняем и закрываем файл.
Проверьте синтаксис Nginx на наличие ошибок командой:
1 |
sudo nginx -t |
И если все настроено правильно мы увидим примерно следующий ответ от Nginx:
1 2 |
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
После этого смело перезапускаем веб сервер Nginx, что бы внесенные нами изменения вступили в силу, командой:
1 |
sudo service nginx restart |
Примечание:
Домены: test.com и virtual.com — замените на свои реальные домены. Актуально для VPS или сервера который смотрит в мир.
Если вы работает с VPS то нужно в панели управления доменов, добавить А-запись с IP адресом VPS. Подождать пока данные о маршруте домена вступят в силу и проверить в браузер введя:
1 |
http://my_domain.com |
Если все сделано правильно вы увидите свою index.html страницу.
Если вы работает с виртальным сервером созданым на своем компьютере то нужно внести в файл host (для linux /etc/hosts) IP адрес виртуального сервера (при условии, что не используете NAT, а используете dhcp и ваш сервер в той же локальной сети что и ваш основной компьютер)
Файл /etc/hosts будет выглядить примерно следующим образом:
1 2 3 4 5 |
127.0.0.1 localhost . . . 192.168.0.110 test.com www.test.com 192.168.0.110 virtual.com www.virtual.com |
Удачи!