Веб-сервер Apache является наиболее популярным способом размещения веб-контента в Интернете. Более половины всех активных сайтов во всем мире используют именно его, так как Apache это крайне мощный и гибкий инструмент размещения веб-контента.

Apache разбит на отдельные блоки, каждый из которых отвечает за свою конкретную задачу и может быть настроен независимо от остальных блоков. Базовый блок, отвечающий за организацию использования доменов на вашем сервере, называется virtual host .

Virtual host позволяет администратору размещать несколько доменов или сайтов на одном сервере и одном ip-адресе. Это актуально для тех, кто желает размещать несколько сайтов на одном VPS.

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

В этой статье вы научитесь настраивать Virtual hosts в системе Ubuntu 16.04 и предоставлять разным пользователям различное содержимое, в зависимости от домена, который они указали в адресной строке.

Подготовка

Прежде чем начать выполнять действия, описанные в этой статье, крайне рекомендуется создать пользователя с Root-привилегиями, если вы этого еще не сделали. Как это сделать вы можете прочитать в этой статье , выполнив шаги №1-4.

Кроме того, у вас должен быть установлен веб-сервер Apache2. Если вы этого еще не сделали, установите его выполнением следующих команд:

Sudo apt-get update sudo apt-get install apache2

После выполнения вышеперечисленных шагов, мы можем начинать.

Для наглядности, в данном руководстве будут созданы виртуальные хосты для доменов example.com и test.com . В процессе всей статьи эти домены будут использованы во всех командах и конфигурационных файлах, когда же вы будете настраивать свой сервер, вы должны будете заменить эти два домена на те, что хотите использовать вы.

Если у вас еще нет доменов или вы какой-либо причине не хотите привязывать их к вашему VPS, в шестом шаге данного руководства есть инструкции, как можно эмулировать использование доменов при помощи файла hosts.

Шаг первый – Создаём дерево директорий

Первое, что вы должны сделать – это подготовить директории для ваших доменов. Корневая директория Apache находится по адресу /var/www и именно тут мы будем создавать каталоги для каждого из доменов, которые хотим использовать. В каждом из этих каталогов мы создадим папку public_html , где будем размещать файлы наших сайтов.

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

Sudo mkdir -p /var/www/example.com /public_html sudo mkdir -p /var/www/test.com /public_html

Красным цветом выделены домены, которые вы собираетесь обслуживать при помощи вашего VPS.

Шаг второй – назначение прав доступа

Мы создали структуру каталогов для наших доменов, но на данном этапе доступ к этим каталогам есть только у root пользователя. Если мы хотим, чтобы обычный пользователь имел возможность изменять файлы, мы должны настроить права доступа, выполнив следующие команды:

Sudo chown -R $USER:$USER /var/www/example.com /public_html sudo chown -R $USER:$USER /var/www/test.com /public_html

Переменная $USER принимает значение имени пользователя, под которым вы сидите в данный момент, сразу после нажатия кнопки Enter. Таким образом, после выполнения данных команд владельцем директорий public_html , в которых вы будете хранить контент ваших сайтов, назначается наш текущий пользователь.

Помимо полного права доступа для текущего пользователя, вы должны быть убеждены что все ваши веб-папки открыты для чтения «для всех», это необходимо для корректной обработки запросов и отображения сайтов:

Sudo chmod -R 755 /var/www

Теперь наш сервер имеет необходимые права доступа для показа контента посетителям, а наш пользователь может создавать и изменять этот контент в директориях.

Шаг третий – создание тестовых страниц для каждого виртуального хоста

Мы создали структуру директорий и настроили права на них. Пришло время размещать контент.
На данном этапе нам нужно будет лишь убедиться, что все правильно настроено и работает, поэтому ограничимся простенькими файлами index.html для каждого хоста.
Давайте начнем с example.com . Вы можете создать index.html и открыть его в текстовом редакторе, выполнив команду:

Nano /var/www/example.com /public_html/index.html

Внутри этого файла разместим небольшой html-код, благодаря которому сможем понять, что попали на нужный нам сайт. Например такой:

Добро пожаловать на Example.com !

Работает! Виртуальный хост example.com настроен правильно!

Сохраните и закройте файл.
Сделаем копию только что созданного файла, чтобы использовать её в качестве базы для аналогичного файла домена test.com:

Cp /var/www/example.com /public_html/index.html /var/www/test.com /public_html/index.html

Откроем копию файла и изменим в ней несколько значений:

Nano /var/www/test.com/public_html/index.html Добро пожаловать на Test.com !

Работает! Виртуальный хост test.com настроен правильно!

Сохраните и закройте файл. Теперь у нас есть страницы для проверки работы Виртуальных хостов.

Шаг четвёртый – создание конфигурационных файлов виртуальных хостов

Конфигурационные файлы виртуальных хостов – это такие файлы, в которых прописано, как должен вести себя Apache при запросах на различные домены.
По умолчанию в Apache уже существует один такой файл – 000-default.conf , мы можем воспользоваться им в качестве образца и отправной точки.
Нам предстоит скопировать 000-default.conf для первого домена, настроить его под наши нужды, после чего скопировать уже измененный файл и настроить его под второй домен, внеся небольшие поправки. Стоит отметить, что все названия конфигурационных файлов виртуальных хостов в Ubuntu должны заканчиваться на.conf

Создадим первый конфигурационный файл

Начнем с копирования файла 000-default.conf для нашего первого домена:

Sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com .conf

Откройте новый файл в текстовом редакторе с привилегиями root пользователя:

Sudo nano /etc/apache2/sites-available/example.com .conf

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

ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

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

Для начала изменим параметр ServerAdmin , поместим туда адрес электронной почты, на которую администратор сайта будет получать сообщения:

ServerAdmin [email protected]

После этого вы должны добавить два параметра. Первый, ServerName , определяет домен, запросы на который будет обрабатывать данный виртуальный хост. Второй, ServerAlias, определяет дополнительные имена вашего сайта, которые будут обрабатываться точно также как основной домен. Это полезно, например, для сопоставления вашего основного и www.*** домена.

ServerName example.com ServerAlias www.example.com

Последняя вещь, которую нам нужно изменить в базовом конфигурационном файле, это параметр DocumentRoot , определяющий расположение директории, из которой будет грузиться наш сайт. Вы уже создали нужные директории в первом шаге нашего руководства, так что запишем нужный адрес в файл:

DocumentRoot /var/www/example.com /public_html

После проведенных манипуляций наш файл должен выглядеть примерно так:

ServerAdmin [email protected] ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com /public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

Сохраним и закроем его.

Скопируем первый Виртуальный Хост и настроим его для обработки второго домена

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

Sudo cp /etc/apache2/sites-available/example.com .conf /etc/apache2/sites-available/test.com .conf

Откроем новый файл с привилегиями root:

Sudo nano /etc/apache2/sites-available/test.com .conf

Теперь мы должны изменить все параметры, настроив их под второй домен. Должно получится что-то вроде этого:

ServerAdmin [email protected] ServerName test.com ServerAlias www.test.com DocumentRoot /var/www/test.com /public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

Когда закончите, сохраните и закройте файл.

Шаг пятый – активация виртуальных хостов

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

Используйте инструмент a2ensite для активации ваших хостов. Пример использования:

Sudo a2ensite example.com .conf sudo a2ensite test.com .conf

После выполнения данных команд, необходимо отключить стандартный хост:

Sudo a2dissite 000-default.conf

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

Sudo systemctl restart apache2

Для перезапуска вы также можете использовать другую команду:

Sudo service apache2 restart

Эта команда также сработает, но вы можете не получить результат если попробуете использовать её в других дистрибутивах, в отличии от systemctl .

Шаг шестой – настройка файла hosts (не обязательно)

Если вы настроили ваши виртуальные хосты для реально существующих доменов и настроили DNS так, чтобы запросы на домены перенаправлялись на ваш сервер, то все хорошо. Если же у вас еще нет доменов или же вы по какой-то причине пока что не хотите прицеплять их к вашему серверу, вы можете использовать файл hosts вашего локального компьютера, чтобы имитировать переход через нужный домен для проверки работы virtual host .
При выполнении описанных ниже действий запросы на определенные домены с вашего локального компьютера будут перехватываться и принудительно перенаправляться на ip-адрес вашего VPS, в обход DNS-серверов. При этом данные перенаправления будут обрабатываться исключительно для вашего локального компьютера, что очень удобно для тестирования различных систем на этапе создания сайтов, в том числе для тестирования virtual host .

Убедитесь что вы настраиваете локальный компьютер, а не VPS. У вас должны быть права администратора или вы должны знать пароль от учетной записи администратора для внесения изменений в файл hosts . Если вы используете операционную систему семейства Linux или Mac, выполните следующую команду:

Sudo nano /etc/hosts

Если вы используете операционную систему Windows, вы найдете файл hosts по адресу:

C:\Windows\System32\drivers\etc\hosts

В системе Windows данный файл скрыт и является системным, возможно вам придется включить отображение скрытых и системных файлов в настройках папок.

Вы должны добавить в файл домены, которые использовали в данном руководстве и публичный ip-адрес вашего VPS. Для доменов, которые использовал я, при условии что ip-адрес моего VPS 111.111.111.111 записи, которые необходимо добавить, будут выглядеть так:

127.0.0.1 localhost 111.111.111.111 example.com 111.111.111.111 test.com

Сохраните и закройте файл. Теперь все запросы на домены example.com и test.com будут автоматически перенаправляться на наш VPS 111.111.111.111 и обрабатываться виртуальными хостами так, как если бы мы использовали реальные домены.

Шаг седьмой – проверка работоспособности

Теперь все настроено и вы можете проверить работу Virtual hosts , введя в адресую строку вашего браузера examle.com . Если всё хорошо, вы увидите следующую страницу:

Аналогично, при запросе к домену test.com вы увидите соответствующую страницу:

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

Заключение

Если вы внимательно выполнили все пункты данного руководства, то ваш сервер успешно настроен на работу двух виртуальных хостов. Вы можете продолжить и, повторив все пункты, добавить столько доменов, сколько считаете необходимым. Можете не стесняться, Apache не имеет программных ограничений на количество virtual hosts , количество доменов и сайтов, которые может обрабатывать сервер, ограничено лишь техническими возможностями железа, на котором установлен Apache.

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

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

Что такое виртуальный хост? Это такая настройка локального веб-сервера, при которой веб-сервер начинает откликаться на заданное имя, а не только на 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 (если он есть). Таким образом, сразу видно, что виртуальный хост создался, и отображается в браузере. Подобным образом добавляются и другие виртуальные хосты.

Привет всем читателям блога, в этой статье я опишу процесс того, как настроить виртуальные хосты в Apache на ОС Ubuntu 14. Думаю что описанные действия также можно применить и в более ранней/поздней версии Ubuntu.

Введение

Далее будет рассмотрено создание виртуального хоста для доменного имени example.com . Для кириллических доменов необходимо перевести доменное имя в punycode, например в помощью этого сервиса :

Шаг 1. Создаём структуру директорий

На этом этапе необходимо создать структуру директорий, содержащую данные сайта, которые будут отображаться пользователям.

Наш корневой каталог (или document root) будет настроен на использование директорий внутри директории /var/www . Здесь мы создадим директорию для виртуального хоста example.com , который мы планируем настроить. Также создадим вложенную директорию public_html , которая будет содержать файлы сайта.

Создадим нужные директории следующей командой:

Sudo mkdir -p /var/www/example.com /public_html

Шаг 2. Назначаем права доступа

Теперь у нас есть структура директорий для файлов сайта, но владелец этих директорий – root-пользователь. Если мы хотим, чтобы обычные пользователи могли изменять файлы в веб-директории, то мы можем изменить их владельца используя следующую команду:

Sudo chown -R $USER:$USER /var/www/example.com /public_html

Переменная $USER содержит имя пользователя, под которым вы залогинены в текущий момент. Теперь текущий пользователь владеет директорией public_html , в которых мы будем хранить файлы сайта.

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

Sudo chmod -R 755 /var/www

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

Шаг 3. Создаём демо-страницу для хоста

Теперь, когда структура директорий готова, то можно создать какой-нибудь контент для отображения посетителям сайта example.com .

Мы делаем это просто для проверки, поэтому тестовая страница будет очень простой.

В папке public_html домена example.com создадим файл index.php :

Nano /var/www/example.com /public_html/index.php

В этом файле создадим простой PHP-скрипт, чтобы убедится что всё работает:

Когда закончите, сохраните и закройте файл. Теперь у нас есть страница, необходимая для проверки конфигурации виртуального хоста.

Шаг 4. Создаём файл виртуального хоста

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

Конфигурация Ubuntu по-умолчанию требует, чтобы каждый файл виртуального хоста заканчивался расширением .conf . По умолчанию, Apache имеет файл виртуального хоста 000-default.conf , который мы можем использовать в качестве отправной точки. Скопируем этот файл, чтобы на его основе создать файл виртуального хоста для нашего домена example.com .

Sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com .conf

Откроем этот новый файл в редакторе с root-правами:

Sudo nano /etc/apache2/sites-available/example.com .conf

Файл будет иметь примерно такое содержание:

ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

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

ServerAdmin admin@example.com

Затем мы должны добавить две новые директивы. Первая, ServerName , устанавливает основной домен, который должен соответствовать названию виртуального хоста. Это должно быть ваше доменное имя. Вторая, ServerAlias , определяет другие имена, которые должны интерпретироваться так, как будто это основной домен. Это удобно для использования дополнительных доменных имен, например, с использованием www :

ServerName example.com ServerAlias www.example.com

Единственная вещь, которую осталось изменить в базовом файле виртуального хоста, это расположение корневого каталога этого домена. Мы уже создали нужную директорию, так что нам осталось изменить директиву DocumentRoot так, чтобы она ссылалась на созданную нами директорию:

DocumentRoot /var/www/example.com /public_html

Теперь наш файл виртуального хоста должен выглядеть следующим образом:

ServerAdmin [email protected] ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com /public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

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

Шаг 5. Включаем новый виртуальный хост

Теперь, когда мы создали файл виртуального хоста example.com , нужно активировать сайт с помощью утилиты a2ensite :

Sudo a2ensite example.com .conf

После завершения необходимо перезапустить Apache, чтобы изменения вступили в силу:

Sudo service apache2 restart

Шаг 6. Тестируем результат

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

http://example.com

Вы должны увидеть похожую страницу:

Если сайт работает, значит вы успешно сконфигурировали виртуальный хост на веб-сервере Apache под Ubuntu! Apache может работать с любым количеством доменных имен, так что можете добавлять виртуальные хосты в Apache до тех пор, пока ваш сервер справляется с нагрузкой.

После настройки файла httpd- vhosts. conf проверим правильность его конфигурации. В каталоге D:\ server\ Apache\ bin\ создайте файл httpd- S. cmd с содержимым:
“D:\server\Apache\bin\httpd.exe” –S
pause

После запуска этого файла вы увидите окно с отчетом о проверке, Syntax OK в конце говорит о том, что все настройки в порядке.

Теперь нужно прописать созданные хосты в файл C:\ Windows\ system32\ drivers\ etc\ hosts . Для этого открываем его текстовым редактором и вносим следующие записи:

127.0.0.1 www.host1.ru host1.ru #Чтобы не набирать www перед именем сайта, создаем зеркало
127.0.0.1 www.host2 host2 #Можно и без.ru создавать хосты
127.0.0.1 host3 #Самый распространенный вариант для локалки
127.0.0.1 localhost # Обычно уже указано, проследите чтобы случайно не удалили и не закомментировали.

Сохраните файл и перезапустите Apache. Попробуйте разместить в каталогах созданных вами виртуальных хостов какие-нибудь тестовые файлы (например index.html) и из браузера открыть хосты по адресам, указанным в директории ServerName каждого хоста.

Если вам приходится часто создавать виртуальные хосты и не очень хочется каждый раз редактировать все эти файлы и перезапускать Apache вручную, создайте в папке сервера (D:\ server\ ) файл createVH.cmd с таким содержимым:

@cls
@rem Получаем текущую папку. Если у вас структура папок сервера как у меня, но он установлен, например на другом диске, укажите здесь вместо %~dp0 путь с нему (например, D:\server\) косая черта в конце обязательна.
@set server_path=%~dp0
:dir_exist
@set /P new_dir="Enter new VHost name:"
@set /P ip_add="Enter your IP address:"
@ if exist %server_path%%new_dir% echo "VHost %new_dir% already exist. Please re-enter Vhost name."
@ if exist %server_path%%new_dir% goto dir_exist
@md %server_path%%new_dir%

@rem Здесь указывается путь до конфиг файла виртуальных хостов, если у вас другой, поменяйте
@set outputfile=%server_path%Apache\conf\extra\httpd-vhosts.conf
@echo. >> %outputfile%
@echo ^ >> %outputfile%
@echo ServerName %new_dir% >> %outputfile%
@echo DocumentRoot "%server_path%%new_dir%" >> %outputfile%
@echo ErrorLog "%server_path%logs\%new_dir%.error.log" >> %outputfile%
@echo CustomLog "%server_path%logs\%new_dir%.access.log" common >> %outputfile%
@echo ^ >> %outputfile%
@if %ip_add%==* set ip_host=127.0.0.1
@if not %ip_add%==* set ip_host=%ip_add%
@set hostfile=%windir%\system32\drivers\etc\hosts
@echo. >> %hostfile%
@echo %ip_host% %new_dir% >> %hostfile%
@set htmlfile=%server_path%%new_dir%\index.html
@echo ^ >> %htmlfile%
@echo ^ >> %htmlfile%
@echo ^%new_dir%^ >> %htmlfile%
@echo ^
>> %htmlfile%
@echo ^ >> %htmlfile%
@echo %new_dir% >> %htmlfile%
@echo ^
>> %htmlfile%
@echo ^
>> %htmlfile%
@rem Здесь путь до самого сервера, если у вас другой, поменяйте
@start %server_path%Apache\bin\httpd.exe -k restart

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

Обратите внимание, программа рассчитана на то, что структура каталогов сервера соответствует той, которую я указывал в первой статье. Если у вас установлен сервер по другим путям, поправьте файл в соответствии с ними.

Теги: apache, настройка сервера, начинающим

Проблема виртуальных хостов становится достаточно острой, когда вам нужно создать 2 или более хостов. Для их администрирования обычным "localhost " не обойтись. С помощью виртуальных хостов и сервера Apache эту проблему вполне можно решить.

Создание виртуальных хостов Apache, это совсем несложная и быстрая работа.

Итак, вы установили и настроили Apache, как написано в статье "Настройка Apache и PHP " и получили, таким образом, директорию "C:\web_server\apache\htdocs\ " для хранения документов. Однако в интернете вы поддерживаете (или, скорее всего, будете поддерживать) несколько серверов, а Apache создал только один. Конечно, можно структуру этих нескольких серверов хранить на одном сервере, однако проще и удобнее было бы создать несколько виртуальных хостов.

Мы создадим виртуальные хосты с использованием одного общего IP-адреса. Советую имена виртуальных хостов называть так же, как и на нынешнем Web-сервере, но только без суффикса ".net " или ".com " - это может многое упростить при программировании скриптов. Например, создадим виртуальный хост "profiphp ".

Для установки виртуальных хостов необходимо сделать некоторые изменения в файле конфигурации Apache "", а также в некоторых файлах Windows .

Создаем папку "localhost " в корневом каталоге диска (C:\localhost\ ). Далее создаем в ней каталог виртуального хоста - "profiphp " (C:\localhost\profiphp\ ). Именно в этой папке и будут содержаться файлы виртуального хоста.

Далее необходимо включить поддержку виртуальных хостов. Откройте файл "C:\web_server\apache\conf\httpd.conf " и добавьте следующие строки в самом конце файла после всех комментариев:
# localhost
NameVirtualHost 127.0.0.1
# Контейнер конфигурации виртуального хоста

# Домен по которому Вы сможете обращаться к виртуальному хосту.
ServerName localhost:80
# Папка, в которой будет корень хоста.

# Файл, в который будут записываться ошибки.

# Файл журнала доступа к хосту.


# profiphp

ServerName profiphp:80



Директива "NameVirtualHost " говорит серверу, что указанный IP-адрес может использоваться несколькими виртуальными хостами, поэтому для обработки запросов, поступающих на этот адрес, нужно использовать протокол HTTP 1.1 .

При необходимости можно добавить и другие параметры в блоки " " (например, DirectoryIndex и т.д.). Не переопределенные параметры наследуются виртуальным хостом от главного. Однако не советую злоупотреблять настройками в этих секциях - лучше сделать их в файле ".htaccess " в директории нужного хоста, так как компания, которая предоставляет настоящие виртуальные хосты в интернете, вряд ли позволит менять эти блоки.

Также следует заметить, что включить поддержку виртуальных хостов можно и другим вариантом. Для этого необходимо в файле "C:\web_server\apache\conf\httpd.conf " раскомментировать строку:
Include conf/extra/httpd-vhosts.conf И редактировать файл "C:\web_server\apache\conf\extra\httpd-vhosts.conf ", в котором прописаны все виртуальные хосты. Данный вариант более понятный, поскольку у нас есть отдельный файл с настройками виртуальных хостов. Но если виртуальных хостом немного, тогда проще добавить настройки в конфигурационный файл Apache напрямую чем подключать отдельный файл.

Если виртуальных хостов много, то работа по их конфигурированию в одном файле "httpd.conf " может осложниться. Решением этой проблемы является создание специального конфигурационного файла для каждого виртуального узла и присоединение этих файлов с помощью директивы "include ". В конфигурационные файлы помещаются только контейнер " " и директивы внутри него.

Следующий шаг создания виртуального хоста - это изменение файла "C:\WINDOWS\system32\drivers\etc\hosts " операционной системы. Откройте данный файл и добавьте в него строки:
127.0.0.1 localhost
127.0.0.1 profiphp Если у Вас уже есть запись "localhost ", то второй добавлять не нужно.

Теперь запустите сервер Apache, откройте браузер, введите в адресной строке "http://profiphp/ " и вы окажетесь в своем виртуальном хосте.

Если у вас по каким то причинам виртуальные хосты не работают, необходимо проверить файл логов, который находится по адресу: "/apache/logs/error.log ". Например, может содержаться уведомление:
AH00548: NameVirtualHost has no effect and will be removed in the next release /apache/conf/httpd.conf:553 Дело в том, что до версии Apache 2.3.11, директива NameVirtualHost должна была инструктировать сервер о конкретном IP-адресе и комбинации портов, которые могут использоваться в качестве виртуального хоста на основе имени. Версия 2.3.11 и более поздние, когда IP-адрес и комбинация портов используются на нескольких виртуальных хостах, виртуальный хост на основе имени автоматически включается для этого адреса. Поэтому в настоящее время эта директива не действует. Единственным решением данной проблемы является удаление директивы NameVirtualHost . Также необходимо заменить все значения VirtualHost :
Измененный код:

ServerName localhost:80
DocumentRoot "C:/web_server/apache/htdocs"
ErrorLog "c:/web_server/apache/htdocs/error.log"
CustomLog "c:/web_server/apache/htdocs/access.log" common

# profiphp

ServerName profiphp
DocumentRoot "C:/localhost/profiphp"
ErrorLog "c:/localhost/profiphp/error.log"
CustomLog "c:/localhost/profiphp/access.log" common