1. Что такое виртуальные хосты?
Представьте, вы открываете уютное кафе. Большая часть клиентов приходит за кофе ☕, но иногда кто-то заказывает чай 🍵. Вместо того, чтобы открыть отдельное заведение для чайных любителей, вы просто выделили небольшой уголок для любителей чая. В мире веб-серверов эта концепция называется виртуальными хостами. Они позволяют вашему серверу обрабатывать несколько сайтов (с разными доменами), сохраняя один физический сервер.
Типы виртуальных хостов
- На основе IP-адресов — каждый сайт получает свой уникальный IP-адрес. Это похоже на VIP-зону на концерте: каждый клиент с VIP-билетом получает свое место.
- На основе доменных имен — несколько сайтов могут делить один 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. Процесс тот же:
- Создаете новый файл конфигурации.
- Указываете уникальное доменное имя и корневую папку.
- Активируете конфигурацию и перезапускаете сервер.
Для 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, чтобы ваши сайты стали безопасными. Но это уже тема для следующей лекции!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ