Когда сайтов у разработчика появляется несколько уже становится неудобным тестировать их расположив в папке /srv/www/htdocs и вызывая в браузере по https://localhost/testfolder. Да и более правильное место для них не в этой директории. В этой статье рассказывается как настроить виртуальный хост под Apache. Эту же информацию можно использовать и при настройке реального сервера в интернете. В принципе разницы нет. Настройка будет производиться на примере openSUSE 11 с Apache 2.
В статье я предполагаю, что вы разместили файлы для вашего сайта в вашей домашней директории /home/izumeroot/workspaces/mydomain (здесь izumeroot это имя вашего локально пользователя, под которым вы работаете).
Итак, откроем в вашем любимом текстовом редакторе главный конфигурационный файл Apache /etc/apache2/httpd.conf . В ранних версиях все настройки писались прямо сюда. Но сейчас файл содержит много строк наподобие этих:

# IP addresses / ports to listen on
Include /etc/apache2/listen.conf
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them.
Include /etc/apache2/vhosts.d/*.conf

Первая инструкция включает файл, который задает какие порты и доменные имена прослушивать, а вторая включает все файлы с расширением conf в директории vhosts.d. Эти файлы содержат подробные настройки для каждого виртуального хоста.
Итак перейдем к файлу /etc/apache2/listen.conf. ( /etc/apache2/httpd.conf можно закрыть).
Он содержит надписи типа этой

NameVirtualHost localhost:80

Сюда же мы должны добавить надпись аналогичную данной, только с IP-адресом нашего сайта. Пусть наш сайт имеет IP 127.0.0.1 (он локальный) и имя mydomain.test. Тогда следующей строкой после localhost впишем наш IP. Получаем в том месте следующее.

NameVirtualHost localhost:80
NameVirtualHost 127.0.0.1:80

Если в папке vhosts.d у вас нет файлов с расширением conf, то создайте один пожалуйста. Например hosts.conf.
Скопируйте в данный файл следующий строки

<VirtualHost 127.0.0.1:80>
 ServerAdmin izumeroot@gmail.com
 ServerName mydomain.test
 DocumentRoot /home/izumeroot/workspaces/mydomain/
 ErrorLog /home/izumeroot/workspaces/mydomain/error_log
 CustomLog /home/izumeroot/workspaces/mydomain/access_log combined    
 <Directory /home/izumeroot/workspaces/mydomain/>
  Options None
  AllowOverride All
  Order deny,allow
  Allow from all
 </Directory>
</VirtualHost>

Исправьте пути к директориям и каталогам на свои. Опции ErrorLog и CustomLog задают пути к файлам логов ошибок и обращений. Теперь нам осталось дать браузеру информацию о том что данному сайту соответствует именно наш IP (для локальных сайтов). Поэтому откроем файл /etc/hosts.
Там будет строка

127.0.0.1       localhost

После слова localhost через пробелы можно добавлять какое угодно количество сайтов для данного IP. Добавим наш сайт. Теперь этот кусок файла примет вид

127.0.0.1       localhost  mydomain.test

Осталось перезагрузить Apache.

/etc/init.d/apache2 restart

Если вы не увидели сообщений об ошибках и высветилась заветная надпись done, то вы все сделали верно. Теперь можно вводить наш адрес в браузер. Не забудьте создать index.php!

Tags: , ,

18 Responses to “Настройка Apache. Виртуальные хосты Apache (Linux)”

  1.  Zeus Says:

    А что делать если нет дирректории vhosts.d в apache2?

  2.  Zeus Says:

    Apache ругается так:
    * Restarting web server apache2 * We failed to correctly shutdown apache, so we’re now killing all running apache processes. This is almost certainly suboptimal, so please make sure your system is working as you’d expect now!
    apache2: Syntax error on line 189 of /etc/apache2/apache2.conf: Syntax error on line 5 of /etc/apache2/httpd.conf: Include directory ‘/etc/apache2/vhosts.d’ not found

  3.  Игорь Тельменко Says:

    Если нет директории vhosts.d, то настройки виртуальных хостов скорее всего у вас должны быть прямо в файле /etc/apache2/httpd.conf. Какой у вас дистрибутив?

  4.  Игорь Тельменко Says:

    Как вариант делать без include прямо в /etc/apache2/httpd.conf
    Должно работать

  5.  Александр Says:

    после выполнения команды /etc/init.d/apache2 restart - apache получаю сообщение:

    NameVirtualHost 127.0.0.1 has no VirtualHosts

    Что делать?

  6.  Игорь Тельменко Says:

    Надо добавлять запись

    <VirtualHost 127.0.0.1:80>
  7.  CHEM_Eugene Says:

    Для создания виртуального хоста apache2 в ubuntu 10.04 я написал себе bash-скриптик, который все делает за меня. Если кому поможет, буду рад

    P.S. - предыдущий коммент можно удалить

  8.  Игорь Тельменко Says:

    Спасибо! Занятно.
    В openSUSE даже GUI есть для настройки Apache. Только за этими GUI и bash-скриптами народ так и не научится настраивать и слдомает зубы там где такой автоматизации нет.
    К тому же на высоконагруженных проектах удобнее запустить apache в связке с каким-нибудь легковесным web-сервером. Например с nginx. И тут уж без чтения манов не обойтись. Надо закаляться :)

  9.  sandro Says:

    <a href=\"https://https://www.yaap.info/page/ustanovka-i-nastrojka-lamp-linuxapachemysqlphp-v-ubuntu\">LAMP и настройка вирт. хостов</a>- По ссылке намного свежее инфа.

  10.  rashid Says:

    Александр Says:

    после выполнения команды /etc/init.d/apache2 restart - apache получаю сообщение:

    NameVirtualHost 127.0.0.1 has no VirtualHosts

    Что делать?

    Игорь Тельменко Says:

    Надо добавлять запись

    куда добавлять? по интрукции прописано

  11.  Игорь Тельменко Says:

    В /etc/apache2/listen.conf

  12.  rashid Says:

    Прописал ещё по задания вопроса здесь.
    Но примерно через час незначительных ковыряний в конфигах всё заработало, но так и продолжает писать (обидно, что так ничего и не понял):
    [warn] NameVirtualHost localhost:80 has no VirtualHosts
    [warn] NameVirtualHost 127.0.0.1:80 has no VirtualHosts
    но работает

  13.  Игорь Тельменко Says:

    Проверил на чистой opensuse 11.4 . Действительно ворнингами плюется.
    Там оказывается в listen.conf есть строка Listen 80. Ее оказывается достаточно и те две строки можно убрать.

  14.  rashid Says:

    Вот теперь понял. ругательства пропали. :-)))
    Спасибо!

  15.  Олега Says:

    А если порт не 80, то что прописывать в /etc/hosts ?

  16.  Даныч Says:

    Добрый день. Имею такую проблему.
    настроен веб сервер из локальной сети проблем доступа в серверу нет , проблем с виртуальными хостами так же нет. не по имени не по ИПшнику.

    Проблема в том чтобы получить доступ к веб серваку из вне. на рутере настроил перенаправдение 111.222.333.444:8080 на 192.168.1.9:80 порта (на рутере 80 порт занят процессом mini httpd ) …. после такого я могу получить доступ к phpmyadmin по адрессу 111.222.333.444:8080/phpmyadmin , а так же могу получить доступ к веб серверу(тестовой странице)при условии что отсутствуют виртуальные хосты .
    Собственно сам вопрос как так хитро настроить виртуальный хост чтобы получить к нему доступ из вне ?

    ServerName 192.168.1.9
    # ServerAlias dank0.tk
    DocumentRoot “/var/www/html/blog”

    DirectoryIndex index.php

    #
    #ServerName https://www.dank0.tk
    #ServerAlias dank0.tk#
    #DocumentRoot “/var/www/html/blog”
    #
    # DirectoryIndex index.php
    #
    #

    пробовал и так и сяк не получается подскажите решение если возможно ?

  17.  Игорь Тельменко Says:

    Скорее всего так происходит из-за ServerName. У Вас указан 192.168.1.9 . Но будет ли при обращении извне доменное имя “192.168.1.9″? Я думаю, что нет.

  18.  Саня Says:

    Спасибо.
    Все работает !