Настройка virtualhost на apache2

Ромчик
1

Создание virtualhost на apache2Доброго времени суток дорогой читатель блога “WEB программирование от А до Я”. Сегодня мы немного отойдем от web программирования и поговорим об инструментах web разработчика. А точнее мы остановимся на virtualhost для apache2. Многие разработчики делают и поддерживают несколько проектов. Так, например, у меня есть проект на Joomla, другой проект на WordPress, а также есть несколько тестовых проектов на, которых я оттачиваю мастерство. И тут возникает вопрос: “А как на одной машине развернуть несколько хостов?” Дальше я постараюсь наиболее понятно ответить на данный вопрос.
Небольшое замечание на моей рабочей машине стоит операционная система Ubuntu, сервер apache2. Поэтому и настройки virtualhost я буду приводить для этой связки. Но разницы между конфигурацией virtualhost на ubuntu ни чем не будет отличаться от конфигурации virtualhost на Windows или какой либо другой операционной системы. Одно отличие это расположение конфигурационных файлов для virtualhost. А теперь давайте приступим…

Сразу хочу отметить, что apache2 у Вас уже установлен. В Ubuntu apache устанавливается из репозитория. Для Windows существуют пакеты Denver и XAMPP.
Теперь давайте разберемся с понятием virtualhost. Virtualhost — это размещение нескольких хостов на  одной машине.

Конфигурационные файлы apache2 в ubuntu находятся в /etc/apache2
Файл apache2.conf — это основной файл конфигурации.
А виртуальные хосты находятся в папке /etc/apache2/sites-available
Для каждого виртуального хоста в данной папке есть свой конфигурационный файл.
Но это актуально для ubuntu. Для других операционных систем настройки virtualhost содержаться в самом файле конфигурации apache2 apache2.conf в разделе <VirtualHost>.
Любое описание виртуального хоста начинается с <VirtualHost> и заканчивается </VirtualHost>.  Это обязательно!!!
Также virtualhost вы можете привязать к определенному ip-адресу и порту. Это делается следующим образом:


<VirtualHost <ip>:<port>>
настройка virtualhost
</VirtualHost>

или привязать один virtualhost к нескольким ip-адресам:

<VirtualHost <ip> <ip>:<port>>
настройка virtualhost
</VirtualHost>

Давайте приведем пример действующего virtualhost:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName kohana
    ServerAlias kohana
    DocumentRoot /var/www/kohana
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/kohana>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/www/kohana/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/www/kohana/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

И разберем каждую строчку:

  1. <VirtualHost *:80> — этот тег обозначает, что дальше будут следовать настройки виртуального хоста. Виртуальный хост будет срабатывать при обращении на любой адрес по порту 80.
  2. ServerAdmin — директива содержит e-mail адрес администратора данного хоста и будет показываться в сообщениях об ошибке. В нашем случае — это webmaster@localhost
  3. ServerName — эта директива определяет имя хоста и порт, по которому сервер идентифицирует себя. Это необходимо при создании URL. Так, например, у Вас есть хост first.example.com, а сервер имеет еще название www.example.com и Вы хотите, чтоб веб-сервер определял Ваш хост и по этому имени, тогда в этой директиве должны прописать ServerName www.example.com
  4. ServerAlias — данная директива устанавливает альтернативные имена хостов.
  5. DocumentRoot — директива устанавливает каталог, где находятся файлы для обработки apache2. Т.е. в данном каталоге хранятся Ваши файлы сайта.
  6. <Directory /> в данной директиве мы можем прописать различные правила для каталога. Данная директива обязательна должна закрываться тегом </Directory>. Так например, мы прописываем правила для каталога home:
<Directory /home/>
AllowOverride FileInfo
</Directory>

Также в пути к каталогу мы можем применять и регулярные выражения.
Теперь давайте рассмотрим какие правила мы можем прописать в данной директиве

  • AllowOverride данный параметр может содержать следующие значения: None — тогда файл .htaccess будет полностью игнорироваться, All — тогда в .htaccess допускаются все директории.
  • Options — устанавливает особенности сервера для данного каталога. Может принимать следующие значения: None — тогда ни одна из опций не допускается, All — допускаются все опции кроме MultiViews, ExecCGI — разрешает выполнение CGI скриптов, FollowSymLinks  -сервер будет следовать за символическими связями, Includes — разрешается Server-Site-Includes (SSI), IncludesNOEXEC — разрешается SSI, но запрещается комманды #exec и #include CGI скриптов, Indexes — если по ссылке в каталоге ничего не найдено, то сервер возвратит содержание каталога, MultiViews — разрешает MultiViews (действие MultiViews заключается в следующем пользователь в адресной строке набирает <каталог_1>/<каталог_2> и если вдруг <каталог_2> не существует, то сервер ищет в <каталог_1> файл <каталог_2>.*), SymLinksIfOwnerMatch — сервер будет следовать только тем символическим связям, для которых целевой файл или каталог имеют тот же идентификатор пользователя что и связь.
  • Order — данной директивой мы устанавливаем порядок проверки, т.е. в начале проверяем на запрет и если все у нас проходит, то разрешаем
  • Deny — в данной директиве мы указываем доступ к серверу на основе хоста или ip-адреса. В данной директиве мы перечисляем запрещенные хосты
  • allow — в данной директиве мы указываем доступ к серверу, перечисляем разрешенные хосты.
  1. ErrorLog — в данной директиве мы указываем путь к файлу логов.
  2. LogLevel — в данной директиве мы указываем уровень сообщений, которые будут записываться в лог-файл. Существуют следующие уровни:
  • emerg — чрезвычайные ситуации — система непригодна для использования.
  • alert  — действий должны быть приняты немедленно.
  • crit — критическое условие.
  • error — возникновение ошибки.
  • warn — предупреждения.
  • notice — нормальное состояние.
  • info — информация.
  • debug — debug сообщения
  1. CustomLog — директива в которой указываем путь к файлу логов, где регистрируются запросы к серверу.

Фуф, с файлом конфигурации для virtualhost мы разобрались.
Теперь давайте создадим виртуальный хост. Для этого в Ubuntu в папке /etc/apache2/sites-available/ создаем файл с названием нашего хоста например test. И помещаем туда следующий код:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName test
    ServerAlias test
    DocumentRoot /var/www/test
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/test>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/www/test/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/www/test/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

Теперь в папке /var/www/ создаем папку test (тут и будут находиться файлы нашего virtualhost)
Кофигурацию для нашего хоста мы создали. Осталось включить этот виртуальный хост. Для этого вводим команду:

sudo a2ensite test

Перезагрузить сам apache:

sudo /etc/init.d apache2 restart

И все наш virtualhost работает.
Давайте в файле /etc/hosts добавим строку 127.0.0.1    test
Теперь введя в браузере адрес test мы попадаем на virtualhost на нашем локальном сервере.
На этом настройка virtualhost на apache2 завершена. Если у Вас появились вопросы, то пишите в комментариях я обязательно на них отвечу.
И не забывайте следить за обновлениями на моем блоге, подписавшись на RSS-рассылку.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика