Добавление виртуальных хостов в Apache. Виртуальные хосты Apache Apache виртуальный хост

Термин Virtual Host (виртуальный хост) относится к практике запуска более чем одного сайта (такие как company1.example.com и company2.example.com) на одной машине. Виртуальные хосты могут быть "IP-based", что означает, что у вас есть различные IP адреса для каждого сайта, или "name-based", что означает, что у вас есть несколько имён, работающие на каждом IP адресе. Для конечного пользователя тот факт, что эти сайты работают на одном и том же физическом сервере, не является очевидным, то есть он может об этом и не знать.

Можно создать виртуальный хост Apache — один или сразу много. Суть хостов Apache в том, что в браузере вместо ввода IP к сайту можно обратиться по имени хоста — точно также как мы открываем все сайты в Интернете: мы вводим доменное имя, а не IP адрес сайта. Аналогично можно настроить и на локальном веб-сервере: в браузере вместо 127.0.0.1 или вместо localhost можно открывать свои локальные сайты, например, по легко запоминающимся именам.

Особенности настройки виртуальных хостов Apache в Windows

Прежде чем приступить к настройке, совсем немного теории: при открытии сайтов по доменному имени или по имени хоста, веб-браузеру всё равно нужно знать IP адрес веб-сервера, куда делается запрос. Эту проблему решают DNS сервера. То есть перед открытием они спрашивают у сервера имён DNS, какой IP имеет сайт, например, ?

Поскольку мы не можем добавить запись в DNS сервер для нашего локального сайта, мы воспользуемся другой возможностью операционной системы.

Суть в том, что аналогичные записи, как в DNS сервер, можно добавить в системный файл и Windows перед тем, как отправить запрос к DNS серверу, также сделает запрос к этому файлу.

Допустим я хочу создать виртуальный хост Apache с именем php.test , тогда я открываю файл C:\Windows\System32\drivers\etc\hosts и добавляю в него запись

127.0.0.1 php.test

Вы можете добавить в этот файл любое количество хостов с указанием любых IP адресов. Каждая запись должна быть на собственной строке. Первым должен быть помещён IP адрес, а затем соответствующее имя хоста. IP адрес и имя хоста должны быть разделены хотя бы одним пробелом. Вместо пробела можно использовать табуляцию (Tab).

В этом файле можно вставлять комментарии — комментариями считаются все строки, которые начинаются с символа # (решётка). Комментарии могут быть как размещены на отдельных строках, так и следовать после имени машины. Итак, мы выполнили подготовительный этап — прописали имя нашего виртуального хоста в файле hosts . В результате запрос, сделанный к этому виртуальному хосту, теперь будет перенаправляться веб-серверу Apache — именно этого мы и добивались.

Настройка в Apache виртуальных остов на основе имени

Теперь нам нужно сделать так, чтобы сам веб-сервер Apache мог обрабатывать пришедший запрос для определённого хоста. То есть мы наконец-то переходим к настройке Apache.

Откройте главный конфигурационный файл httpd.conf (например у меня он расположен по адресу C:\Server\bin\Apache24\conf\httpd.conf ).

Найдите там строку:

#Include conf/extra/httpd-vhosts.conf

И раскомментируйте её, чтобы получилось:

Include conf/extra/httpd-vhosts.conf

Найдите строку

LoadModule log_config_module modules/mod_log_config.so

и убедитесь, что она раскомментирована.

Сохраните и закройте этот файл.

Теперь откройте сам файл httpd-vhosts.conf (c:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf ). Содержимое этого файла можно просто удалить — оно нам не понадобится.

Виртуальные хосты описываются в контейнере . Внутри этого контейнера можно указать практически любые директивы Apache. Но обязательными являются только две:

  • ServerName — определяет само имя хоста
  • DocumentRoot — определяет, какие файлы показывать для этого имени, то есть содержит путь до сайта этого хоста

Секций может быть любое количество — столько, сколько вам нужно виртуальных хостов на данном сервере.

Ещё одно правило: первый раздел VirtualHost используется для сбора всех запросов, которые не соответствуют ServerName или ServerAlias в любом другом блоке . То есть первая секция является как бы дефолтной — для всех остальных запросов, которые не предназначены для виртуальных хостов. Поэтому нам нужно сделать как минимум два контейнера :

  1. Будет собирать запросы, которые не предназначены ни для какого из хостов. Обычные запросы, например, к localhost или 127.0.0.1
  2. Контейнер самого хоста (у меня хост называется php.test)

Что будет если не сделать первый («дефолтный») контейнер? Все запросы, которые даже те, которые не предназначаются для php.test, всё равно будут обрабатываться как будто бы они пришли для хоста php.test.

Вместе с контейнером VirtualHost можно указать IP адрес и порт, которые прослушиваются для данного хоста. Если вы используете какой-то нестандартный порт, который ещё не открыт с помощью директивы Listen , то вам нужно добавить эту директиву с соответствующим портом в главный конфигурационный файл или прямо в файл httpd-vhosts.conf . Например, я хочу, чтобы виртуальный хост был привязан к порту 81, тогда перед VirtualHost мне нужно добавить:

Listen 81

Для нашего примера я буду использовать стандартный 80 порт, а в качестве IP адреса укажу звёздочку. Дефолтным хостом у меня является localhost , файлы которого расположены по пути C:/Server/data/htdocs/ , тогда первый контейнер выглядит так:

Второй контейнер создан для хоста php.test , и его файлы будут располагаться в папке , тогда полностью код контейнера будет выглядеть так:

Собираем всё вместе, полное содержимое файла httpd-vhosts.conf :

ServerName localhost DocumentRoot "C:/Server/data/htdocs/" ServerName php.test DocumentRoot "C:/Server/data/htdocs/virthosts/host1/"

Чтобы сделанные изменения вступили в силу, перезапускаем веб-сервер:

C:\Server\bin\Apache24\bin\httpd.exe -k restart

Открываю в веб-браузере ссылку http://php.test и вижу там тот файл, который создан для этого хоста (то есть размещён в папке C:/Server/data/htdocs/virthosts/host1/ ):

Кроме этих самых необходимых директив, как уже было сказано, можно использовать практически любые настройки хостов, которые поддерживает главный конфигурационный файл Apache.

Например, кроме ServerName , можно добавить ещё ServerAlias :

ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com

Можно установить отдельные файлы для каждого виртуального хоста:

ErrorLog "logs/dummy-host.example.com-error.log" CustomLog "logs/dummy-host.example.com-access.log" common

Установить с помощью директивы ServerAdmin электронную почту администратора данного виртуального хоста, отдельно для данного хоста. Кстати, настройки HTTPS нужно прописывать индивидуально для каждого виртуального хоста, поскольку у каждого из них свои собственные SSL сертификаты.

На уровне виртуальных хостов можно прописать правила mod_rewrite , настроить аутентификацию, контроль доступа и любые другие настройки, которые поддерживает Apache, можно перенести в конфигурацию виртуальных хостов для их тонкой и индивидуальной настройки.

Доброго времени суток дорогой читатель блога “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 вы можете привязать к определенному ip-адресу и порту. Это делается следующим образом:

:> настройка virtualhost

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

:> настройка virtualhost

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

ServerAdmin webmaster@localhost ServerName kohana ServerAlias kohana DocumentRoot /var/www/kohana ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 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/"

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

  1. — этот тег обозначает, что дальше будут следовать настройки виртуального хоста. Виртуальный хост будет срабатывать при обращении на любой адрес по порту 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. в данной директиве мы можем прописать различные правила для каталога. Данная директива обязательна должна закрываться тегом . Так например, мы прописываем правила для каталога home:
AllowOverride FileInfo

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

  • 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. И помещаем туда следующий код:

ServerAdmin webmaster@localhost ServerName test ServerAlias test DocumentRoot /var/www/test Options FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all ScriptAlias /cgi-bin/usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all 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/" Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0::1/128

Теперь в папке /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 завершена. Если у Вас появились вопросы, то пишите в комментариях я обязательно на них отвечу.
И не забывайте следить за обновлениями на моем блоге, подписавшись на

Нескольких сайтов, то Apache для этих целей предоставляет возможность настройки виртуальных хостов (virtual hosts). Виртуальные хосты бывают двух видов: name-based virtual hosts , то есть привязанные к доменному имени, и IP-based virtual hosts , то есть привязанные к IP-адресу. Виртуальные хосты первого типа используют разные имена для одного IP-адреса, а второго типа – используют для каждого сайта отдельный IP-адрес. Создание виртуальных хостов в Apache необходимы, если на вашем сервере есть несколько сайтов, а их настройка необходима для корректного отображения всех сайтов.

Наиболее распространенным является использование виртуальных хостов на базе имен (name-based virtual hosts), привязанных к одному IP-адресу. Таким образом, можно хранить множество сайтов на одном IP.

Самым простым способом добавления и последующей настройки виртуальных хостов Apache является редактирование конфигурационного файла веб-сервера, который имеет разные названия и места расположения в зависимости от операционной системы:

В Red-Hat /CentOS /Fedora :

/etc/httpd/conf/httpd.conf

Debian /Ubuntu :

/etc/apache2/apache2.conf

Вторым способом настройки является использование собственных .conf файлов, которые должны размещаться по пути:

В Red-Hat /CentOS /Fedora :

/etc/httpd/conf.d/filename.conf,

Debian /Ubuntu :

/etc/apache2/conf.d/filename.conf.

Как правило, в конфигурационном файле httpd.conf или apache2.conf раздел управления виртуальными хостами располагается в самом конце. Для добавления виртуального хоста нужно будет открыть этот файл и раскомментировать в нём (убрать # ) директиву NameVirtualHost *:80 (Аргумент * обозначает «все имена хостов»). Если будет использоваться способ размещения конфигурации в conf.d , то указанную директиву не нужно раскомментировать, а следует определить её в самом создаваемом файле.

После NameVirtualHost следует блок VirtualHost *:80 . Подобные блоки и являются конфигурацией ваших виртуальных хостов. Выглядит это все примерно следующим образом:

NameVirtualHost *:80 AllowOverride All Options All ServerAdmin [email protected] DocumentRoot /var/www/site1.ru ServerName site1.ru ServerAlias www.site1.ru ErrorLog logs/site1.ru-error_log CustomLog logs/site1.ru-access_log common ServerAdmin [email protected] DocumentRoot /var/www/site2.ru ServerName site2.ru ServerAlias www.site2.ru ErrorLog logs/site2.ru-error_log CustomLog logs/site2.ru-access_log common

Именно здесь и производятся все настройки виртуальных хостов, а также, подключение или отключение определенных опций.

Рассмотрим более детально, за что отвечает каждая указанная выше директива.

1. Директива ServerAdmin указывает электронный адрес администратора сервера, на который приходят все уведомления с хоста, касающиеся его администрирования.

2. Директива DocumentRoot указывает корневую директорию с файлами сайта, которые должны будут выдаваться веб-сервером клиенту (браузеру).

3. Директива Server Name определяет имя хоста, по запросу которого должны будут выдаваться файлы, расположенные в DocumentRoot.

4. Директива ServerAlias служит для задания альтернативных имен хоста (алиасов, псевдонимов), на которые он откликается.

5. Директива ErrorLog задает файлы протоколов ошибок для каждого хоста, а CustomLog – файлы протоколов для всего остального, кроме ошибок.

До блоков с виртуалхостами, как вы заметили, есть еще запись:

AllowOverride All

В тегах заключается перечень директив (параметров), которые будут применяться к конкретной директории, которая указывается в открывающем теге. В примере выше – это var/www/ . Указанная директива AllowOverride указывает, использовать ли файлы .htaccess и если да, то какие глобальные директивы веб-сервера в можно переопределять в таких файлах. В представленном выше примере значение AllowOverride установленно в All , что разрешает обрабатывать файлы.htaccess и все указанные в нём директивы. Существуют и другие возможные значения:

AuthConfig – разрешает использовать директивы авторизации (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require, и т.д..).

FileInfo – разрешает использовать директивы, управляющие типами документов (AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority, и т.д..).

Indexes — разрешает использовать директивы для управления индексацией каталогов (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, и т.д..).

Limit — разрешает использовать директивы управления доступом (allow, deny и order).

Options — разрешает использовать директивы, с помощью которых можно управлять специфическими особенностями каталога (Options и XBitHack).

Это одна из многих возможных директив, с которыми вы можете ознакомиться на сайте разработчиков.

После сохранения изменений в файле необходимо проверить новые настройки на наличие ошибок. Для выполнения проверки можно использовать следующие команды:

Apachectl configtest apachectl -S apachectl -d

Если получено сообщение “Syntax OK ”, значит ошибок нет и можно перезагружать веб-сервер, чтобы применились изменения. Сделать это можно с помощью следующих команд:

Red-Hat/CentOS/Fedora:

Service httpd restart

/etc/init.d/ httpd restart

Debian/Ubuntu:

Service apache2 restart

/etc/init.d/apache2 restart

Далее вы можете столкнуться со следующей проблемой. При поступлении запроса Apache проходит по всему списку виртуальных хостов в поисках соответствующего, и, если не находит соответствия, выдает первый по порядку хост. Чтобы устранить данную неприятность, специалисты придумали так называемую секцию-заглушку, которую следует вставить перед первой секцией VirtualHost реального сайта. Выглядит она приблизительно следующим образом:

ServerName default DocumentRoot /var/www/default

Таким образом, все неправильные запросы будут отсылаться по пути var/www/default , где можно создать индексную страницу, которая будет сообщать о неправильном запросе.

Также, Apache по умолчанию не имеет доступа к вашим домашним директориям, а только к директории /var/www . Если вы используете на своем сервере SElinux, то для предоставления Apache доступа к домашним директориям используйте следующие команды:

Setsebool -P httpd_enable_homedirs 1

Setsebool -P apache2_enable_homedirs 1

Для того чтобы Apache имел доступ к определенной директории, например, к /home/mydir следует использовать команду:

Chcon -R -t httpd_sys_content_t /home/mydir

Chcon -R -t apache2_sys_content_t /home/mydir

При отключенном SELinux для предоставления Apache доступа к той или иной домашней директории сайта, вам нужно будет вручную отредактировать его конфигурационный файл (/etc/httpd/conf/httpd.conf в CentOS/Fedora или /etc/apache2/apache2.conf в Debian/Ubuntu ).

Открыв конфигурационный файл веб-сервера для редактирования, найдите строку DocumentRoot (при использовании редактора nano ее можно отыскать с помощью комбинации клавиш Ctrl+W ). Замените значение в кавычках /var/www/html на абсолютный путь к домашней директории сайта (например, /home/username/site.com ). Сохраните изменения и выйдите из меню редактора (Ctrl+O и Ctrl+X ). Перезапустите Apache.

Если у вас на VPS установлена ОС Debian/Ubuntu , то править строку DocumentRoot необходимо в файле /etc/apache2/sites-available/default . Откройте его для редактирования и замените стандартное значение /var/www на абсолютный путь к домашней директории сайта. Выполните перезапуск веб-сервера.

На этом базовая настройка виртуальных хостов окончена.

В этой статье написано, как создавать несколько виртуальных хостов на локальной машине. Данное действие необходимо уметь делать веб-мастерам, когда они разрабатывают несколько сайтов.

Вначале небольшое объяснение.

Что такое виртуальный хост? Это такая настройка локального веб-сервера, при которой веб-сервер начинает откликаться на заданное имя, а не только на IP 127.0.0.1 или псевдоним localhost . То есть, при настройке виртуального хоста на имя site.ru , в браузере по этому URL начнет отвечать локальный веб-сервер.

Веб-сервер можно настроить на несколько имен сайтов. Тогда веб-сервер начнет выдавать страницы, соответсвующие каталогу, в котором находятся данные для указанного имени. Например, есть два виртуальных хоста - site.ru и money.com . Для site.ru настроен рабочий каталог /var/www/site.ru , а для money.com настроен рабочий каталог /var/www/money.com . Если теперь в браузере обратиться к site.ru , то веб-сервер будет выдавать страницы из каталога /var/www/site.ru , а если обратиться к money.com , то веб-сервер будет генерировать страницы из каталога /var/www/money.com . Как сделать такую настройку и написано в данной статье.

В Debian 5.x.x , сервер Apache-2 сразу после установки готов работать с виртуальными хостами. Но настроен только на один (default) хост, который доступен как localhost . Чтобы добавить еще один виртуальный хост, надо сделать следущее:

1. В каталог /etc/apache2/sites-available нужно добавить пустой файл с произвольным именем. Для удобства, лучше давать имя файла, содержащее имя виртуального хоста. Например, если планируется добавить виртуальный хост с именем studio.ru , надо задатьдать имя файла studio.ru.conf .

2. В этот файл надо вписать (примерно) следующее:

ServerName studio.ru
ServerAlias www.studio.ru

DocumentRoot "/var/www/studio"


allow from all
Options +Indexes

  • ServerName, ServerAlias - это URL, набираемый в браузере, на который должен откликаться данный виртуальный хост;
  • DocumentRoot - это корневая директория данного виртуального хоста;
  • Секция Directory - настройка прав доступа к указанной директории. В данном случае настраиваются права доступа к корневой директории виртуального хоста.

Нужно обратить внимание на параметр секции VirtualHost. Здесь он написан как "*:80 ". Но обязательно нужно заглянуть в файл /etc/apache2/sites-available/default и посмотреть, какой параметр написан там в такой же секции VirtualHost. Если написано "* ", то в нашем файле надо так же написать "* ".

Другоми словами, нужно заглянуть в файл /etc/apache2/ports.conf . Там нужно найти директиву:

NameVirtualHost *:80

Какое значение стоит в этой директиве (здесь - "*:80 "), такое значение и нужно прописать в качестве параметра секции VirtualHost во всех файлах директории /etc/apache2/sites-available , иначе хосты видны не будут.

Частая ошибка - когда в /etc/apache2/ports.conf прописано "*.80", а в файле хоста в секции VirtualHost прописано "*". Несмотря на то, что маска "*" покрывает маску "*.80", сервер Apache не понимает такой записи. При такой настройке, сервер Apache не найдет нужного хоста!

3. Надо перейти в каталог /etc/apache2/sites-enabled и создать там символическую ссылку на созданный нами файл:

# cd /etc/apache2/sites-enabled
# ln -s /etc/apache2/sites-available/studio.ru.conf studio.ru.conf

4. Необходимо перезапустить Apache командами:

# /etc/init.d/apache2 stop
Stopping web server: apache2 ... waiting .

# /etc/init.d/apache2 start
Starting web server: apache2.

в момент перезапуска надо смотреть, не появляются ли в консоли сообщения об ошибках или предупреждения. В нормально сконфигурированном Апаче никаких сообщений о ошибках (и даже предупреждений!) выдаваться не должно.

5. Завершающее действие - нужно открыть файл /etc/hosts и прописать там новую строку следующего содержания:

127.0.0.1 studio.ru

это позволит браузеру обращаться локально к Апачу, а не искать данный сайт в интернете.

Все, конфигурирование закончено. Никаких перезагрузок не требуется.

Можно в браузере набрать URL http://studio.ru/index.html , и должен открыться файл /var/www/studio/index.html (если он есть). Таким образом, сразу видно, что виртуальный хост создался, и отображается в браузере. Подобным образом добавляются и другие виртуальные хосты.

С недавних пор пришлось озаботиться доступом к сайтам на локалхосте из локальной сети. Кому-то эго потешить, кому-то дать доступ к внутрикорпоративному порталу, кому-то просто, чтобы дома можно было работать не только за одним компьютером.
Итак, поехали.

Будем считать, что у нас есть сайт на виртуальном хосте. Например, пусть это будет site.loc . Также даны два компьютера — один под Open SUSE (Apache2 + PHP + MySQL, IP: 192.168.0.100 , например), второй — под WinXP (пусть это будет ноутбук, если кому-то интересно). Мне нужно, чтобы я мог зайти в phpMyAdmin и работать с админкой site.loc c ноутбука . Ну, или просто посмотреть из-под винды, как оно будет выглядеть 🙂

Настроим сеть

Для начала, на компьютере, откуда хотим получить доступ (в нашем случае, с WinXP), открываем файл C:/Windows/System32/drivers/etc/hosts и добавляем строчку после 127.0.0.1 :

192.168.0.100 site.loc

Сохраняем файл. что тут написано — при наборе адреса «site.loc » идти на IP «192.168.0.100 «. Это вместо того, чтобы поднимать DNS ради одного-двух-пяти сайтов.

Если второй компьютер на Linux — файл будет /etc/hosts , действия — те же.

phpMyAdmin

Если с phpMyAdmin все относительно просто — пишем http://192.168.0.100/phpMyAdmin (регистр тут важен) и все открывается, то с виртуальными хостами придется расковырять пару файлов.

Виртуальные хосты

site.loc , соответственно, живет на виртуальном хосте, который прописан так:

UserDir public_html

Все прекрасно работает на локалхосте, но при попытке зайти на site.loc cо второго компьютера, нас ждет облом. Откроется страница, находящаяся в папке WWW (по умолчанию там будет написано «It worws! «). Вот тут-то мы и начинаем.

Для начала, апачу нужно сказать, какие порты слушать и на каких интерфейсах (он же не телепат, правильно?). Открываем файл /etc/apache2/listen.conf и видим там нечто следующее (исключая коммментарии, конечно):

Sudo nano /etc/apache2/listen.conf Listen 80 Listen 443

К этому всему добру надо указать апачу слушать два интерфейса — локальный (127.0.0.1 ), чтобы можно было смотреть сайт на локалхосте как раньше, и внешний (192.168.0.100 ), чтобы апач принимал запросы еще и с того интерфейса, который смотрит в локалку .

NameVirtualHost 192.168.0.100:80 NameVirtualHost 127.0.0.1:80

Можно добавить это в самый конец файла, можно в начало.

Чтобы апач слушал все интерфейсы на 80 порту — вместо того, что выше, добавляем

NameVirtualHost *:80

Этот вариант хорош именно в нашем случае, когда у нас по сути 2 интерфейса (значимых для дела) — 127.0.0.1 и 192.168.0.100

Чтобы все интерфейсы на всех портах (а надо ли?)

NameVirtualHost *

В принципе, все это описано в комментариях в этом же файле. Правда, на английском…

Теперь открываем известный нам уже файл /etc/apache2/vhosts.d/site.loc.conf и добавляем в него блок:

DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] AllowOverride All Order allow,deny Allow from all UserDir public_html

Таким образом, должно получиться так:

Sudo nano /etc/apache2/vhosts.d/site.loc.conf DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] AllowOverride All Order allow,deny Allow from all UserDir public_html DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] AllowOverride All Order allow,deny Allow from all UserDir public_html

Собственно, осталось перезапустить апач:

Sudo /etc/init.d/apache2 restart

и проверять. Все должно работать на обоих компьютерах.