Когда сайтов у разработчика появляется несколько уже становится неудобным тестировать их расположив в папке /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: apache, linux, серверы
А что делать если нет дирректории vhosts.d в apache2?
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
Если нет директории vhosts.d, то настройки виртуальных хостов скорее всего у вас должны быть прямо в файле /etc/apache2/httpd.conf. Какой у вас дистрибутив?
Как вариант делать без include прямо в /etc/apache2/httpd.conf
Должно работать
после выполнения команды /etc/init.d/apache2 restart - apache получаю сообщение:
NameVirtualHost 127.0.0.1 has no VirtualHosts
Что делать?
Надо добавлять запись
<VirtualHost 127.0.0.1:80>
Для создания виртуального хоста apache2 в ubuntu 10.04 я написал себе bash-скриптик, который все делает за меня. Если кому поможет, буду рад
P.S. - предыдущий коммент можно удалить
Спасибо! Занятно.
В openSUSE даже GUI есть для настройки Apache. Только за этими GUI и bash-скриптами народ так и не научится настраивать и слдомает зубы там где такой автоматизации нет.
К тому же на высоконагруженных проектах удобнее запустить apache в связке с каким-нибудь легковесным web-сервером. Например с nginx. И тут уж без чтения манов не обойтись. Надо закаляться
<a href=\"https://https://www.yaap.info/page/ustanovka-i-nastrojka-lamp-linuxapachemysqlphp-v-ubuntu\">LAMP и настройка вирт. хостов</a>- По ссылке намного свежее инфа.
Александр Says:
после выполнения команды /etc/init.d/apache2 restart - apache получаю сообщение:
NameVirtualHost 127.0.0.1 has no VirtualHosts
Что делать?
Игорь Тельменко Says:
Надо добавлять запись
куда добавлять? по интрукции прописано
В /etc/apache2/listen.conf
Прописал ещё по задания вопроса здесь.
Но примерно через час незначительных ковыряний в конфигах всё заработало, но так и продолжает писать (обидно, что так ничего и не понял):
[warn] NameVirtualHost localhost:80 has no VirtualHosts
[warn] NameVirtualHost 127.0.0.1:80 has no VirtualHosts
но работает
Проверил на чистой opensuse 11.4 . Действительно ворнингами плюется.
Там оказывается в listen.conf есть строка Listen 80. Ее оказывается достаточно и те две строки можно убрать.
Вот теперь понял. ругательства пропали. :-)))
Спасибо!
А если порт не 80, то что прописывать в /etc/hosts ?
Добрый день. Имею такую проблему.
настроен веб сервер из локальной сети проблем доступа в серверу нет , проблем с виртуальными хостами так же нет. не по имени не по ИПшнику.
Проблема в том чтобы получить доступ к веб серваку из вне. на рутере настроил перенаправдение 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
#
#
пробовал и так и сяк не получается подскажите решение если возможно ?
Скорее всего так происходит из-за ServerName. У Вас указан 192.168.1.9 . Но будет ли при обращении извне доменное имя “192.168.1.9″? Я думаю, что нет.
Спасибо.
Все работает !