Введение: Есть настроенный Веб-сервер на Ubuntu 14.04 TLS (связка Apache + MySQL + php + phpmyadmin). Доступ к нему осуществляется с компьютера под управлением Windows 7, следующим образом:

Из браузера – по IP.

В консоль – через putty.

По ssh – через winCSP.

Компьютеры в одной локальной сети. Теперь я расскажу о том как осуществить настройку виртуальных хостов в Apache.

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

Шаг 1: создание каталогов

Создаем корневые каталоги для локального хоста newhost:

sudo mkdir -p /var/www/newhost/public_html

В папке public_html будут храниться файлы хоста newhost.

Шаг 2: назначение прав

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

sudo chown -R it /var/www/newhost/public_html

Для корректного отображения страниц сайта назначим пользователю it (у меня он уже создан) права доступа на общую веб-директорию:

sudo chmod it -R 755 /var/www

Шаг 3: создание файлов нового виртуального хоста

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

Стандартный файл виртуального хоста в Apache – 000-default.conf./ Скопируем его для нового виртуального хоста:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/newhost.conf

После чего откроем его для редактирования:

sudo nano /etc/apache2/sites-available/newhost.conf

Для удобства удалим комментарии – весь текст в строке начинающейся со знака #.

Файл примет следующий вид:

ServerAdmin [email protected]

DocumentRoot /var/www/html

Приведем его к виду:

ServerAdmin [email protected]

ServerName newhost

ServerAlias www.newhost

DocumentRoot /var/www/newhost/public_html

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

Сохраним и закроем файл. Для редактора nano это команды Ctrl+O (сохранить) Ctrl+X (закрыть).

Шаг 4: включение виртуального хоста

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

sudo a2ensite newhost.conf

После чего перезапустим Apache

sudo service apache2 reload

Шаг 5: создание индексного файла и проверка работы хоста

Создадим файл index.html со следующим содержимым:

Добро пожаловать на хост newhost!

Успех! Хост newhost работает!

Шаг 6: настройка файла локального хоста

Открываем файл hosts

sudo nano /etc/hosts

Файл будет иметь примерно следующий вид

127.0.0.1 localhost

127.0.1.1 webserver

Добавляем строку

127.0.1.2 newhost

Сохраняем файл.

Проверяем работоспособность хоста

curl http://newhost

Данная команда должна вывести нам html код страницы. Хост успешно создан и работает. Для доступа к хосту через браузер компьютеров под управлением Windows 7 необходимо в файле C:\Windows\System32\drivers\etc добавить

Так как большинство читателей работают с операционной системой Windows, то сначала организуем виртуальные хосты в Windows 7.

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

В качестве примера поместим один или несколько проектов на диск D: локального компьютера. Сначала организуем структуру каталогов. На диске D: создаем каталог «mysites», а в нём каталог для первого сайта «site1». В каталоге «site1» сделаем два подкаталога: «www» и «logs». В первом подкаталоге будет располагаться сам сайт, а во втором, журналы виртуального хоста: access.log (журнал доступа) и error.log (журнал ошибок).

Файлы журналов создавать не надо, они будут созданы автоматически. А в каталоге «www», пока нет сайта, поместим простейший файл-заглушку «index.html» следующего содержания:

Теперь немного поправим настройки для виртуальных хостов веб-сервера Apache. Открываем C:\xampp\apache\conf\extra\ httpd-vhosts.conf
Как видим, этот файл уже содержит два примера виртуальных хостов. Не будем их трогать, а ниже разместим следующие строки:

NameVirtualHost *:80 DocumentRoot "C:/xampp/htdocs" ServerName localhost ServerAdmin [email protected] DocumentRoot "D:/mysites/site1/www" ServerName site1 ServerAlias www.site1 ErrorLog "D:/mysites/site1/logs/error.log" CustomLog "D:/mysites/site1/logs/access.log" common AllowOverride All Require all granted

Первая директива NameVirtualHost *:80 включает поименное использование виртуальных хостов на 80-ом порту (обычный http, если нужен https, используем 443 порт).
Следующие четыре строки это общая секция для всех виртуальных хостов. Если клиент обращается к серверу по IP-адресу или по несуществующему имени он попадет на этот виртуальный хост. В нашем случае в корневую директорию веб-сервера. Остальные строки это описание нашего первого виртуального хоста. Если нужно добавить ещё один виртуальный хост, то просто копируем эту секцию, вставляем ниже и по аналогии изменяем данные. Сохраняем файл.
Значение данных в секции виртуального хоста:

  • Какой порт используется
  • ServerAdmin [email protected] Эл. почта администратора сайта
  • DocumentRoot "D:/mysites/site1/www" Корневой каталог сайта
  • ServerName site1 Имя хоста
  • ServerAlias www.site1 Псевдоним хоста. Можно обращаться, используя псевдоним
  • ErrorLog "D:/mysites/site1/logs/error.log" Расположение журнала ошибок
  • CustomLog "D:/mysites/site1/logs/access.log" common Расположение журнала доступа. Оператор common определяет общую степень детализации журнала. Если нужна более подробная детализация, то вместо common пишем combined
  • Подсекция, в которой определяются права и настройки для конкретного каталога.
  • AllowOverride All Эта директива нужна для правильной работы системы SEF

Из панели управления XAMPP перестартовываем Apache. Изменяем файл C:\Windows\System32\drivers\etc\hosts. Дописываем в него две строки:

Вместо 127.0.0.1 можно написать 127.0.0.2, а для следующего виртуального хоста 127.0.0.3, но в этом нет особой нужды. Об этом напишу в другой раз. А сейчас сохраняем файл. Открываем браузер и адресной строке вводим http://site1 или просто site1. Если всё сделано правильно, видим информацию из файла-заглушки.

Виртуальные хосты в Debian GNU/Linux

Настройка виртуальных хостов в Linux мало чем отличается от их настройки в Windows. Разве что созданием структуры каталогов. Оно и понятно, Apache кроссплатформенное решение, настроечные файлы практически одинаковы.
При установке XAMPP, корневой директорией веб-сервера Apache является каталог /opt/lampp/htdocs. А вот когда Apache устанавливается в Linux отдельным пакетом, то по умолчанию корневой директорией является каталог /var/www. Вот в этот каталог мы и поместим виртуальные хосты.
В качестве примера, создадим каталог /var/www/site1, который будет содержать два подкаталога: logs для журналов и www для файлов сайта.

Делаем владельцем каталога site1 пользователя www-data:

Sudo chown -R www-data:www-data /var/www/site1

В каталог /var/www/site1/www помещаем файл-заглушку index.html

Открываем файл /opt/lampp/etc/extra/httpd-vhosts.conf и удаляем всё его содержимое. Добавляем следующий код:

NameVirtualHost *:80 DocumentRoot "/opt/lampp/htdocs/" ServerName localhost ServerAdmin [email protected] DocumentRoot "/var/www/site1/www" ServerName site1 ServerAlias www.site1 ErrorLog "/var/www/site1/logs/error.log" CustomLog "/var/www/site1/logs/access.log" common Options Indexes FollowSymLinks Includes ExecCGI AddType text/shtml .shtml AddOutputFilter INCLUDES .shtml AllowOverride All Require all granted

Последние 15 строк кода – это как раз описание виртуального хоста site1. Если в дальнейшем надо будет добавить ещё один виртуальный хост, то просто скопируйте эти строки и измените пути к директориям.
Открываем файл /opt/lamp/etc/httpd.conf и раскомментируем (т. е. удалим символ решетки) строку 488:

Include etc/extra/httpd-vhosts.conf

Перестартовываем XAMPP

/opt/lampp/xampp restart

Правим файл /etc/hosts. Ниже строки

127.0.0.1 localhost

Вставляем строку следующие строки:

127.0.0.1 site1 127.0.0.1 www.site1

В адресной строке браузера набираем
http://site1 или просто site1

Если вы видите страницу-заглушку, значит, всё сделали правильно!

Ещё о сайтостроении

    • В материале речь пойдет о 5 ошибках, которые сдерживают развитие вашего лендинга, Наличие именно этих ошибок на целевой странице может пробудить монстра, которого боятся абсолютно все веб-маркетологи - пожирателя конверсии. Вы читаете...

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

В данной статье я расскажу, как добавить виртуальные хосты в Apache.

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

После установки Apache создается один виртуальный хост с именем localhost. Вы можете открыть его в браузере по адресу http://localhost . Директория, в которой размещаются файлы данного сайта /Library/WebServer/Documents .

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

Файлы с настройками хостов мы будем размещать в одной директории /private/etc/apache2/vhosts . Файлы будут иметь имена вида mysite.local.conf .

Подключаем vhosts

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

Откройте файл для редактирования, для этого выполните в терминале команду:

Sudo nano /etc/apache2/httpd.conf

Найдите в файле строку #Include /private/etc/apache2/extra/httpd-vhosts.conf .

Под этой строкой добавьте новую строку:

Include /private/etc/apache2/vhosts/*.conf

Сохраните изменения и закройте файл. Чтобы закрыть файл и сохранить изменения, нажмите Ctrl+X , затем введите Y и нажмите Enter .

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

Создадим директорию /private/etc/apache2/vhosts , которую мы добавили в кофигурацию Apache на предыдущем шаге. Чтобы создать директорию выполните в терминале команду:

Sudo mkdir /private/etc/apache2/vhosts

Перейдем в эту директорию:

Cd /private/etc/apache2/vhosts

Создадим конфигурационный файл _default.conf . В нем мы пропишем конфигурацию виртуального сервера по умолчанию. Создайте новый файл, выполнив в терминале:

Sudo nano _default.conf

Введите следующую конфигурацию:

DocumentRoot "/Library/WebServer/Documents"

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

Теперь создадим конфигурацию для нашего виртуального хоста (сайта). Для примера мы будем создавать сайт с адресом mysite.local , а файлы сайта будем размещать в домашней директории в каталоге mysite (полный путь будет иметь вид /Users/Yury/mysite , вместо Yury должно быть ваше имя пользователя).

Выполните в терминале:

Sudo nano mysite.local.conf

DocumentRoot "/Users/Yury/mysite" ServerName mysite.local ErrorLog "/private/var/log/apache2/mysite.local-error_log" CustomLog "/private/var/log/apache2/mysite.local-access_log" common AllowOverride All Require all granted

В конфигурации мы указали директорию (/Users/Yury/mysite ), в которой располагаются файлы нашего сайта. Задали адрес сайта mysite.local . Указали, где будут храниться лог файлы с ошибками и информацией о доступе к сайту.

Перезапустите Apache:

Sudo apachectl restart

Прежде, чем наш сайт станет доступен по адресу http://mysite.local необходимо добавить информацию о нем в файл /etc/hosts .

Редактирование /etc/hosts

В файле /etc/hosts прописывается соответсвие IP адреса и текстовый адрес хоста (что-то вроде локального DNS).

Нам нужно добавить наш адрес mysite.local . Для этого откройте файл /etc/hosts :

Sudo nano /etc/hosts

И добавьте в файл строку:

127.0.0.1 mysite.local

Настраиваем права доступа

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

В нашем случае нам нужно установить права доступа на директорию /Users/Yury/mysite . Для этого выполните в терминале команду:

Chmod 755 /Users/Yury/mysite

Проверка работы

Теперь наберите в браузере адрес сайта: http://mysite.local

Если все пройдет успешно, то вы увидете ваш сайт.

В случае каких-либо ошибок можно просмотреть логи в файле /private/var/log/apache2/mysite.local-error_log

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

Будем считать, что у нас есть сайт на виртуальном хосте. Например, пусть это будет 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

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

Термин 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, можно перенести в конфигурацию виртуальных хостов для их тонкой и индивидуальной настройки.