Настройка локальной рабочей станции для обслуживания нескольких сайтов с использованием VirtualHost в Apache
06.08.2011, рубрики: how-to | Теги: servers | 3 комментариев »
Вроде о настройке виртуальных хостов на вашей локальной рабочей станции уже было сказано много, но как не странно, никакого более-менее внятного материал на русском мне обнаружить не удалось. У буржуев ситуация получше. В любом случае это важный вопрос, так как все хостеры используют эту технлогию, «вешая» на один IP-адрес по многу сайтов. Например, если проверить мой домен, то станет ясно, что по мимо моего сайта, на том же самом IP-адресе «висит» еще 64 сайта. Это не так уж много, бывает и сотни и тысячи. Реализовать подобный механизм у себя на локальной машине очень просто, а главное это будет удобно использовать. Как это сделать, имея уже готовый Web-сервер на основе Apache, установленный на платформе Debian, написано под катом.
Теория
Тут стоит обратить внимание на официальную документацию. На сайте Apache, раздел Name-based Virtual Host Support c описанием директив и всевозможных комбинаций. Так же, обратите внимание на документацию Drupal’a, там есть очень полезная статья HowTo: Configure your local workstation to serve multiple sites using Drupal’s multisite configurations and Apache’s VirtualHost. Все они на английском.
Настройка виртуальных хостов
Давайте рассмотрим такую ситуацию, когда вы тестируете разные сайты, у себя на компьютере. Вы можете иметь виртуальные хосты, на вашем localhost (127.0.1.1). Правильно сконфигурировав файлы /etc/hosts и конфиг Apache /etc/apache2/sites-available/default вы можете получить сколько угодно сайтов на одном IP-адресе.
Давайте рассмотрим такую ситуацию, вы хотите иметь два разных сайта на одном IP-адресе (127.0.1.1), для примера:
1) Первый сайт будет работать на Drupal
2) Второй сайт будет работать на WordPress.
Данная статья пишется с условием того, что у вас уже есть машина, с подготовленным Debian сервером, и на ней установлен и настроен LAMP. Если это не так, то на пару постов вниз по блогу, вы найдете все необходимые инструкции.
Обычно, Apache предлагает хранить сайты в директории /var/www, мне это не мешает на данный момент, если же вам не нравится, поменяйте.
Сайтов будет несколько. Вот пример структуры катологов для них:

Не самый хороший пример, но самый простой для понимания. Вы можете сделать и по другому.
Создайте эти папки и положите в них Web-скрипты. Так же не забудьте, что необходимо создать соответсвующие БД для каждого сайта, я уже обо всем этом писал, и не раз. Ищите по блогу.
Первое что необходимо сделать, это настройть файл /etc/hosts:
- sudo nano /etc/hosts
Туда впишите следующие:
- 127.0.0.1 localhost
- 127.0.1.1 drupal.local
- 127.0.1.1 wordpress.local
Где drupal.local будет вашим локальным адресом, по которому будет доступен сайт на Drupal’e.
Где wordpress.local будет вашим локальным адресом, по которому будет доступен сайт на WordPress’e.
Теперь приступим к настройке виртуальных хостов в файле /etc/apache2/sites-available/default
- sudo nano /etc/apache2/sites-available/default
Там стоит вписать минимальную конфигурацию для каждого виртуального хоста:
- <VirtualHost *:80>
- ServerName drupal.local
- #LOGS
- ErrorLog "/var/log/apache2/error.log"
- CustomLog "/var/log/apache2/access.log" file
- DocumentRoot /var/www/users/drupal
- </VirtualHost>
- #===========================================================
- <VirtualHost *:80>
- ServerName wordpress.local
- #LOGS
- ErrorLog "/var/log/apache2/error.log"
- CustomLog "/var/log/apache2/access.log" file
- DocumentRoot /var/www/users/wordpress
- </VirtualHost>
Теперь сохраните файл, и перезагрузите сервер:
- sudo /etc/init.d/apache2 restart
Что-бы попасть на сайт Drupal’a перейдите по адресу drupal.local

Что-бы попасть на сайт WordPress’a перейдите по адресу wordpress.local

Надеюсь статья вам понравилась!


Спасибо. Вопрос по поводу:
127.0.1.1 drupal.local
127.0.1.1 wordpress.local
Во многих мануалах пишут, что при добавлении нового сайта изменяется и адрес – 127.0.1.2, 127.0.1.3 и т.д. Есть ли разница?
Нет, разницы нет, сайт можно подвесить на любой IP, на внешний, на внутренний, на IP loopback интерфеса, что лучше всего для тестирования
Интересно… Спасибо!