JavaRush /Курсы /Docker SELF /Конфигурация виртуальных хостов

Конфигурация виртуальных хостов

Docker SELF
7 уровень , 1 лекция
Открыта

1. Что такое виртуальные хосты?

Представьте, вы открываете уютное кафе. Большая часть клиентов приходит за кофе ☕, но иногда кто-то заказывает чай 🍵. Вместо того, чтобы открыть отдельное заведение для чайных любителей, вы просто выделили небольшой уголок для любителей чая. В мире веб-серверов эта концепция называется виртуальными хостами. Они позволяют вашему серверу обрабатывать несколько сайтов (с разными доменами), сохраняя один физический сервер.

Типы виртуальных хостов

  1. На основе IP-адресов — каждый сайт получает свой уникальный IP-адрес. Это похоже на VIP-зону на концерте: каждый клиент с VIP-билетом получает свое место.
  2. На основе доменных имен — несколько сайтов могут делить один IP-адрес. Здесь сервер использует имя хоста (доменное имя) из запроса клиента, чтобы понять, какой сайт нужно показать. Это более распространенный и удобный вариант для большинства проектов.

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

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

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

Создаем файл для нашего сайта, например example.com:

sudo nano /etc/nginx/sites-available/example.com

Добавляем следующий конфигурационный блок:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Разберём код по деталям:

  • listen 80;: Указывает, что сервер будет слушать 80-й порт (по умолчанию используется для HTTP).
  • server_name example.com www.example.com;: Определяет, на какие доменные имена сервер должен реагировать.
  • root /var/www/example.com;: Директива указывает корневую папку, где хранятся файлы сайта.
  • index index.html;: Указывает файл, который будет использоваться как "главная страница" сайта.
  • location / { try_files $uri $uri/ =404; }: Настройка маршрутизации запросов. Если файл или директория не найдены, возвращается ошибка 404.

2. Активация конфигурации

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

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Затем проверяем, чтобы не было ошибок в конфигурации:

sudo nginx -t

Если всё в порядке, перезапускаем сервер:

sudo systemctl reload nginx

3. Проверка работы

Создаем папку для файлов сайта:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

Добавляем следующий простой HTML-код:

<h1>Welcome to example.com!</h1>
<p>Your Nginx server is ready to serve.</p>

Сохраняем файл, затем открываем в браузере: http://example.com. Если видим приветственное сообщение, значит виртуальный хост работает!

4.Символьные ссылки в Linux

Символьные ссылки (или soft links, symlinks) — это специальные файловые объекты, которые указывают на другой файл или директорию. Они функционируют как "ярлыки" в Windows, позволяя обращаться к целевому файлу или папке через альтернативный путь.

Символьные ссылки содержат путь к оригинальному объекту, а не сам объект. Если оригинальный файл или папка перемещается или удаляется, ссылка становится "битой", так как она больше не указывает на существующий объект.

Команда для создания символьной ссылки:

ln -s target link_name
  • target — путь к оригинальному объекту.
  • link_name — имя ссылки.

Пример:

ln -s /var/log/syslog log_link

Теперь через log_link можно обращаться к файлу /var/log/syslog.

Применение:

  • Упрощение навигации.
  • Создание альтернативных точек доступа к файлам.
  • Организация каталогов.

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

1. Создание конфигурационного файла

Apache использует другой подход. Здесь конфигурации для виртуальных хостов находятся в папке /etc/apache2/sites-available/. Создаем файл для нашего сайта:

sudo nano /etc/apache2/sites-available/example.com.conf

Добавляем следующий код:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Краткое объяснение:

  • <VirtualHost *:80>: Указывает, что конфигурация применяется для всех запросов на 80-й порт.
  • ServerName и ServerAlias: Определяют основное и дополнительные доменные имена для сайта.
  • DocumentRoot: Указывает корневую папку сайта.
  • <Directory>: Блок, который определяет права доступа и поведение для указанной директории.

2. Активация конфигурации

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

sudo a2ensite example.com.conf

Перезапускаем сервер, чтобы изменения вступили в силу:

sudo systemctl restart apache2

3. Проверка работы

Опять же, создаем папку и файл для сайта:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

Наполняем его содержимым:

<h1>Welcome to example.com on Apache!</h1>

Сохраняем, и открываем в браузере: http://example.com. Если видите приветственную страницу — поздравляю, вы настроили виртуальный хост в Apache!


4. Проверка и управление несколькими хостами

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

Допустим, вы хотите обслуживать второй сайт: test.com. Процесс тот же:

  1. Создаете новый файл конфигурации.
  2. Указываете уникальное доменное имя и корневую папку.
  3. Активируете конфигурацию и перезапускаете сервер.

Для Nginx:

sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx

Для Apache:

sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2

Отладка проблем

Если ваши виртуальные хосты не работают, начните с проверки ошибок. Например:

  • Для Nginx:

      sudo tail -f /var/log/nginx/error.log
    
  • Для Apache:

      sudo tail -f /var/log/apache2/error.log
    

Также можно использовать команду curl, чтобы протестировать сайт напрямую:

curl -I http://example.com

Теперь вы можете настроить виртуальные хосты и запускать несколько сайтов на одном сервере. Рука об руку с этим идёт конфигурация HTTPS, чтобы ваши сайты стали безопасными. Но это уже тема для следующей лекции!

1
Задача
Docker SELF, 7 уровень, 1 лекция
Недоступна
Создание и настройка виртуального хоста в Nginx
Создание и настройка виртуального хоста в Nginx
1
Задача
Docker SELF, 7 уровень, 1 лекция
Недоступна
Активация виртуального хоста и проверка
Активация виртуального хоста и проверка
1
Задача
Docker SELF, 7 уровень, 1 лекция
Недоступна
Создание второго виртуального хоста в Apache
Создание второго виртуального хоста в Apache
1
Задача
Docker SELF, 7 уровень, 1 лекция
Недоступна
Обслуживание нескольких виртуальных хостов
Обслуживание нескольких виртуальных хостов
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
30 сентября 2025
Открытие сайта в браузере должно отображать содержимое файла `index.html`, а именно надпись `<h1>Welcome to My Test Site</h1>`. --- Ну на кой черт вы добавляете в условие задачи что-то типа "откройте веб-страницу и убедитесь что там..." Как я должен это доказывать вашему валидатору? 😣😣😣 P.S. Добавил строку curl http://mytestsite.com В первый раз валидатор не принял - требовал добавить проверку, что там именно определенный html код, запустил вторую проверку - шизоид успокоился и принял решение...
Иван Румянцев Уровень 23
13 марта 2025
example.com не пашет. Example Domain This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.
Евгений Маркин Уровень 24
17 марта 2025
А он и не должен работать - если нужно в живую опробовать, то покупаешь собственное доменное имя, виртуальный хостинг и вперед
Anonymous #3577564 Уровень 57
5 июня 2025
опять же через hosts перенаправить на локалхост.