Настройка локальной рабочей станции для обслуживания нескольких сайтов с использованием VirtualHost в Apache

Вроде о настройке виртуальных хостов на вашей локальной рабочей станции уже было сказано много, но как не странно, никакого более-менее внятного материал на русском мне обнаружить не удалось. У буржуев ситуация получше. В любом случае это важный вопрос, так как все хостеры используют эту технлогию, “вешая” на один 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
sudo nano /etc/hosts

Туда впишите следующие:

127.0.0.1       localhost
127.0.1.1       drupal.local
127.0.1.1       wordpress.local
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
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>
<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
sudo /etc/init.d/apache2 restart

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

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

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