Index SiteMap Portfolio

Назад

янв
30

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

Эта статья – небольшая hint, по просьбе Артема, автора комментария в заметке о хостах в Денвере. Она полностью работоспособна и для тех, кому никаким боком это Денвер не нужен, так как принцип работы сервера апач от Денвера никак не зависит :).

Представим задачу. Необходимо сделать систему, которая управляет несколькими доменами, либо поддоменами, либо все вместе (одним словом – хостами).

Есть некоторый скрипт, который получает в качестве параметров хост или полный URL адрес, который сейчас открыт в броузере. Получили мы его, например, как результат функции getEnv() (getEnv(‘HTTP_HOST’) - хост, а getEnv(‘REQUEST_URI’) – запрос, все что после хоста). Далее скрипт разбирает этот запрос и получает всю интересующую его информацию. Например текущий сайт.

Мы делаем систему, которая управляет доменами test1.ru, test3.ru и test3.ru.

Те, кто пользуется пакетом DENWER, знают, что хосты создаются как каталоги в папке WebServers\home\ По умолчанию именно так. Получается, чтобы создать 3 хоста и тестировать свой скрипт локально на трех доменах, нужно создать 3 каталога. Кто понял, что я веду к маленькой шутке – браво! :) Вот и она: создать нужно 1 каталог, так как 2 уже созданы Денвером для тестов. Смешно? :)

Затем, нам нужно копировать скрипт в каждый каталог (якобы домен) и смотреть, как он себя ведет при каждом параметре HTTP_HOST-а. Удобно? Нет. Так никто и не делает.

Когда задача ясна, начинаю отвечать непосредственно на вопрос, хотя, больше косвенно отвечать, так как додумать обязательно нужно самому. Зачем была создана эта функция? Сначала, чтобы сообщить апачу, что по запросу test1.ru мы должны искать скрипты в определенном месте с определенными параметрами, нужно в файле конфига апача (\WebServers\usr\local\apache\conf\httpd.conf – для денвера примерно так, главное запомнить, что конфиг это именно httpd.conf, уже смотрите сами, куда засунули апач). Итак, конструкция (в оригинале без цифр):

1. Listen 127.0.0.1:80
2.
3. DocumentRoot "X:/home/test1.ru/www"
4. ServerName " test1.ru"
5. ServerAlias " test1.ru" "www. test1.ru"
6. ScriptAlias /cgi/ "/home/test1.ru/cgi/"
7. ScriptAlias /cgi-bin/ "/home/test1.ru/cgi-bin/"
8. ErrorLog "/home/test1.ru/error.log"
9.

Это пример Денвера, возможны оклонения, если сами влезете. Все эти конструкции лежат в файле vhosts.conf, который рядом с httpd.conf в пакете Денвера (можно заметить в конце httpd строку «Include conf/vhosts.conf», где идет подключение этих хостов). Обратите внимание(!), что моя функция пишет в httpd.conf, так как vhosts каждый раз переписывается скриптами денвера. Вам тоже нужно экспериментировать именно с httpd.conf.

Первая строка сообщает, что обращение идет с IP 127.0.0.1 (обычно такой локальным считается) по 80-му порту (стандартный порт хттп протокола). Строка 3 – каталог, где лежат скрипты (его можно получить из $_SERVER[‘DOCUMENT_ROOT’] в пхп скрипте). Строка 4 – это именно то, что указывает, что получив запрос test1.ru, апач должен запускать индексовый (directory_index = index.php, index.html…) скрипт из папки DocumentRoot).

Строка 5 в общем-то решение всех наших проблем по задаче выше. Как видите, здесь вписано еще и www.test1.ru. Верно, если ввести www.test1.ru в броузере, то попадем на этот же хост test1.ru, но getEnv(‘HTTP_HOST’) вернет уже www.test1.ru, а не просто test1.ru. Вписываем сюда дополнительно: “test2.ru www.test2.ru test3.ru www.test3.ru sub.test1.ru www.sub.test1.ru” в кавычках и через пробел. Сохраняем.

Открываем файл C:\WINDOWS\system32\drivers\etc\hosts (если виндовс стоит в C:\WINDOWS, иначе ищите по аналогии). В комментариях файла читаем, зачем он нам нужен. Если вы запускали Денвер (вообще, апач, перл, пхп и сервер мускл, но одним словом Денвер для нашего примера), то увидите там все свои хосты с предшествующими адресами IP. Добавляем в конец этого файла строки для нашего примера:

127.0.0.1 test2.ru
127.0.0.1 www.test2.ru
127.0.0.1 test3.ru
127.0.0.1 www.test3.ru
127.0.0.1 sub.test1.ru
127.0.0.1 www.sub.test1.ru

Нужно вписать именно тот IP, который был в строке 1 файла httpd.conf. Можно вписать что угодно в формате IP адреса, но чтобы совпадало в двух файлах.

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

Удобно? Да! :)

Итак, еще раз, что делает моя функция. Она сама вписывает алиасы в файл httpd.conf и прописывает нужные «сопоставления IP-адресов именам узлов» в файл hosts. Куда ее вставить? В алгоритме создания доменов есть место типа: «создать новый домен». Сразу после него. Для функции нужно указать главный домен (где лежат скрипты), отформатировать файл httpd.conf должным образом и конечно передать массив всех алиасов, которые там должны быть. Все это уже расписано в комментариях функции. Удобно? Еще удобнее!

Более понятно и подробно я уже не в силах рассказать :)

Надеюсь оказался полезен. Хочу сказать спасибо Артему за тему для статьи. Если Вас интересуют интересные темы, то сообщайте в комментариях. По мере сил буду писать. А силы у меня сколько? Немерено! (здесь уже Гоше Куценко спасибо)

Артем, спасибо!

P.s. Именно так шла разработка моего личного проекта www.opa.by, где автоматически создавались поддомены.

Добавить в закладки на google.com Добавить в закладки на bobrdobr.ru Добавить в закладки на del.icio.us Добавить в закладки на technorati.com Добавить в закладки на linkstore.ru Добавить в закладки на news2.ru Добавить в закладки на rumarkz.ru Добавить в закладки на memori.ru Добавить в закладки на moemesto.ru

Ваше мнение

* Имя:
* E-mail:
*Этот адрес не публикуется. Для общих контаков оставляйте адрес в комментарии.
Сайт/Блог:
Примечание. Комментарии находятся в теге <noindex>, что значит: смысла срать здесь нет.
Добавить в закладки на google.com Добавить в закладки на bobrdobr.ru Добавить в закладки на del.icio.us Добавить в закладки на technorati.com Добавить в закладки на linkstore.ru Добавить в закладки на rumarkz.ru Добавить в закладки на memori.ru Добавить в закладки на moemesto.ru

 Бесплатно

Читать мою ленту
Получать RSS-ленту на почту



Хостинг предоставлен компанией
TutHost.com