Apache + Perl + PHP3 + MySQL для Windows 9x

         

Дистрибутивы


1.       Apache версии 1.3.6 http://www.dizain.ru/dklab/dis/apache_setup.exe

2.       PHP версии 3.0.13 http://www.dizain.ru/dklab/dis/php3_setup.exe

3.       Perl версии 5.004.02 http://www.dizain.ru/dklab/dis/perl_setup.exe

4.       MySQL версии 9.13 http://www.dizain.ru/dklab/dis/mysql.zip



Этап первый - установка


1. Определитесь с директорией, в которую Вы будите устанавливать Apache. Все дальнейшие рассуждения основаны на том, что Вы выбрали для этой цели такой каталог: f:\usr\local\apache

Если диска F: у Вас нет, или если Вы не хотите его захламлять, советуем сделать одно из трех:

1.       Создайте диск F:

с помощью какой-нибудь программы для виртуальных разделов (например, с помощью встроенной в Windows 95/98 программы DriveSpace). Это самое лучшее решение, и с точки зрения экономии памяти, и с точки зрения быстродействия. Ведь что такое Web-сайт, как не набор очень небольших файлов? А DriveSpace как раз и оптимизирует работу с такими файлами.

2.       Сделайте виртуальный диск F:. Для этого создайте где-нибудь на любом диске директорию, которая в будущем будет являться корневой для диска F:. Предположим, Вы выбрали C:\INTERNET. Далее, в начале файла c:\autoexec.bat

пропишите такую строку:

subst

f: C:\INTERNET

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

ВНИМАНИЕ: имеются сведения, что в Windows 95/98 есть ошибка, в результате которой иногда subst-пути "сами по себе" преобразуются в абсолютные. То есть, например, иногда в рассмотренном выше примере команды

f:

cd

\



cd

\

dir

(а точнее, команда dir

в своем заголовке) ошибочно выведут, что текущая директория C:\ (а не F:\, как это должно быть). Указанная ошибка чаще всего проявляется в неработоспособности Perl-транслятора. Так что лично мы не рекомендуем Вам использовать subst. Вместо этого воспользуйтесь пунктом 1.

3.       Наконец, Вы можете всего этого не делать и поставить Apache на любой другой диск, только тогда Вам придется немного тяжелее при выполнении всех остальных действий. Нужно будет все указываемые пути заменять на Ваши собственные, а это крайне неприятно. Еще раз настоятельно рекомендуем воспользоваться диском F:.

Рекомендуем все же разместить Apache в указанном в начале каталоге, так как он максимально соответствует каталогу для реального Web-сервера Интернета. Ведь чем ближе в плане конфигурации мы будем к такому серверу, тем лучше и эффективнее сможем работать.

2.       Запустите только что скачанный файл. В появившемся диалоге нажмите кнопку Yes, а затем - кнопку Next.

3.       Теперь нажмите Browse. Вручную задайте директорию для установки: f:\usr\local\apache

и нажмите кнопку OK.

4.       Выберите тип установки - Сustom и уберите флажок Source Code (если, конечно, не хотите посмотреть исходные тексты Apache). Этим Вы сэкономите себе 3 Мбайта.

5.       Нажмите Next и подождите, пока будут копироваться файлы Apache.

6.       На запрос о перезагрузке компьютера ответьте "Перезагрузить".

Поздравляем - Apache установлен! Теперь самое неприятное - его настройка.



Этап третий - настройка файла httpd.conf


Внимание! Это - самый ответственный момент установки. Просим соблюдать инструкции БУКВАЛЬНО.

1. Откройте директорию f:\usr\local\apache\conf

Откройте находящийся там файл httpd.conf. Это - единственный файл, который Вам осталось настроить. Вам предстоит найти и изменить в нем некоторые строки, а именно те, о которых упоминается далее. Во избежание недоразумений не трогайте все остальное. Следует заметить, что в нем каждый параметр сопровождается несколькими строками комментариев, разобраться в которых с первого раза довольно тяжело. Поэтому не обращайте на них внимание.

2.       В поле ServerAdmin укажите Ваш E-mail адрес, который будет показываться в сообщениях об ошибке сервера. Например:

ServerAdmin my@email.com

3.       В поле ServerName напишите любое слово - на работе это не сказывается, например:

ServerName ApacheServer

Только не забудьте раскомментировать

поле ServerName, то есть убрать символ "#" перед этим параметром (по умолчанию он закомментирован)!

4.       В поле DocumentRoot укажите ту директорию, в которой будут храниться Ваши html-файлы, например:

DocumentRoot f:/www

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

5.       Найдите блок, начинающийся строкой <Directory /> и заканчивающийся </Directory>

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

6.       <Directory />

7.         Options Indexes Includes

8.         AllowOverride All

</Directory>

Таким образом, в этом блоке будут храниться установки для всех директорий по умолчанию (т.к. это - корневая директория).

9.       Найдите аналогичный блок, начинающийся <Directory "f:/usr/local/apache/htdocs"> и заканчивающийся </Directory>. Там будет много комментариев, не обращайте на них внимание. Этот блок следует заменить на:


10.    <Directory "f:/www">

11.      Options Indexes Includes

12.      AllowOverride All

13.      Order allow,deny

14.      Allow from all

</Directory>

Это - установки для директории с Вашими html-документами. Если хотите, можете установить другую директорию, главное, чтобы она совпадала с той, которая прописана в параметре DocumentRoot

15.    Идем дальше. Установите UserDir, например так:

UserDir f:/home

Это будет директория, в которой хранились бы домашние страницы пользователей, если бы это был настоящий Web-сервер, а также корневые каталоги виртуальных хостов (см. ниже). Не забудьте также создать этот каталог.

16.    Установите DirectoryIndex так:

DirectoryIndex index.htm index.html

Это - так называемые файлы индекса, которые автоматически выдаются сервером при обращении к какой-либо директории, если не указано имя html-документа. В принципе, можно добавить сюда и другие имена, например, index.phtml, если Вы будите работать с PHP и т.д.

17.    Найдите и пропишите такой параметр:

ScriptAlias /cgi-bin/ "f:/cgi-bin/"

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

ScriptAlias

/mycgi/ "f:/mycgidir/"

Подобный параметр говорит Apache о том, что, если будет указан путь вида http://localhost/cgi-bin, то на самом деле следует обратиться к директории f:/cgi-bin.

18.    Теперь следует найти и настроить блок параметров, начинающийся с <Directory "f:/cgi-bin"> и заканчивающийся </Directory>. Это - установки для Вашей CGI-директории (если Вы установили для нее другое имя на предыдущем шаге, соответственно модифицируйте путь). Там должно быть:

19.    <Directory "f:/cgi-bin">

20.      AllowOverride All

21.      Options ExecCGI



</Directory>

22.    Настройте следующий параметр:

AddHandler cgi-script .bat .exe

Это говорит Apache о том, что файлы с расширением .exe и .bat нужно рассматривать как CGI-скрипты.

23.    И последнее - установите:

AddHandler server-parsed .shtml .shtm .sht

Или, если Вы хотите, чтобы и обычные файлы html обрабатывались SSI, напишите так:

AddHandler server-parsed .shtml .shtm .sht .html .htm

Поздравляем - Вы настроили свой Apache, и он должен уже работать! Для запуска сервера нажмите Пуск->Программы->Apache Web Server->Start Apache as console app, при этом появится окно, очень похожее на Сеанс MS-DOS, и ничего больше не произойдет. Не закрывайте его и не трогайте до конца работы с Apache.

Несколько слов о том, как можно упростить запуск и завершение сервера. В Windows можно назначить любому ярлыку функциональную комбинацию клавиш, нажав которые, Вы запустите этот ярлык. Так что щелкните правой кнопкой на панели задач, в контекстном меню выберите Свойства, затем Настройка меню и кнопку Дополнительно. В открывшемся Проводнике назначьте ярлыку Start Apache as console app комбинацию Ctrl+Alt+A, а ярлыку Shutdown Apache as console app - Ctrl+Alt+S

Вот шаги, которые можно проделать для проверки работоспособности сервера:

1.       Проверка html: в директории f:/www с html-документами Apache создайте файл index.html. Теперь запустите браузер и наберите:

http://localhost/index.html

или просто

http://localhost/

Загрузится Ваш файл.

2.       Проверка CGI: в директории f:/cgi-bin для CGI-скриптов создайте файл test.bat

с таким содержанием:

3.       @echo off

4.       echo Content-type: text/html

5.       echo.

6.       echo.

dir

Теперь в браузере наберите:

http://localhost/cgi-bin/test.bat

В окне отобразится результат команды DOS dir.

7.       Проверка SSI: аналогична проверке html. Используйте, например, директиву

<!--#exec cgi="/cgi-bin/test.bat"-->


Этап второй - настройка файла конфигурации Apache mime.types


1.       Откройте директорию f:\usr\local\apache\conf. Откройте находящийся там файл mime.types.

2.       Найдите в нем такую строчку:

text/html      html htm

Измените ее на

text/html      html htm shtml shtm sht

Следует заметить, что если Вы по каким-то причинам не хотите портить файл mime.types, то можно вместо этого прописать в файле httpd.conf (см. ниже) строки вида

AddType text/html html htm shtml shtm sht



Настройка Apache


1.       В файл конфигурации Apache conf/mime.types

добавтьте такую строку:

application/x-httpd-php3 phtml php3

2.       Теперь откройте файл conf/httpd.conf

и добавьте в его конец (но перед блоков виртуальных хостов, если они там есть) такие строки:

3.       <Directory "f:/usr/local/php3">

4.         Options ExecCGI

5.       </Directory>

6.       ScriptAlias "/__php_dir__/" "f:/usr/local/php3/"

7.       Action application/x-httpd-php3 "/__php_dir__/php.exe"

Ну вот, пожалуй, и все. Если Вы все сделали правильно, то PHP установлен. Проверьте его работоспособность с помощью простого скрипта, например такого:

<?

echo "It works!<br>\n";

phpinfo();

?>

Напоминаем, что php-скрипты - не то же самое, что cgi-скрипты. В частности, если cgi-скрипты обычно располагают в /cgi-bin/, то php-скрипт должен лежать в директории с документами. Иными словами, файл в этом примере должен называеться примерно так: f:/www/test.php3



Оглавление


1. Введение - зачем нужен домашний виртуальный сервер?

2.       От слов к делу - установка Apache версии 1.3.6

3.       Виртуальные хосты Apache - как это настроить?

4.       Установка PHP версии 3.0.13

5.       Установка Perl версии 5.004.02

6.       Установка MySQL версии 9.13



От слов к делу - установка Apache


"У меня для вас две новости: плохая и хорошая. Плохая: мяса

мало, будем есть бизоний помет. И хорошая: его-то у нас много!.."

Из выступления вождя апачей

Итак, Вы решились установить на свой компьютер Apache для Windows 95/98. В таком случае Вам следует запастись терпением и для начала скачать дистрибутив сервера - файл с именем apache_setup.exe (3.061.629 байт). Скачали? Прекрасно. Теперь самое интересное - настройка Apache для Вашей системы.

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



Установка MySQL


Сначала определимся: зачем же вообще нужны базы данных Web-программисту? Неужели не проще писать все самому? Ведь обычно объем данных не очень велик (если Вы только не пишите поисковую систему). Наш личный опыт таков: оказывается, стоит затратить какое-то время на изучение MySQL - это удивительно мощный инструмент, который сэкономит в будущем немало часов, потраченных на отладку "взбесившегося" скрипта.

Итак, Вы решили установить у себя на локальном Apache поддержку MySQL. Как ни странно, это даже во многом проще, чем заставить работать Perl. Прежде чем привести точные инструкции, хотелось бы уточнить два момента:

1.       Эта статья не претендует ни в коей мере на то, чтобы быть учебником по MySQL. Предполагается, что Вы уже знаете, как работать с этой базой данных. Максимум, что здесь описывается - это то, как заставить MySQL работать под Window 95/98.

2.       В дальнейшем будем считать, что Apache у Вас установлен именно там, где это рекомендовалось выше.

Что ж, приступим.

1.       Для начала запаситесь терпением и скачайте дистрибутив MySQL - mysql.zip. Как можно заметить, он довольно большой. Затем разверните его в любую удобную Вам директорию.

2.       Запустите setup.exe. Он спросит, действительно ли Вы хотите установить MySQL. После того, как Вы ответите утвердительно, файлы начнут копироваться в директорию c:/mysql, т.е. он даже не спросит Вас, куда устанавливать MySQL. Ничего страшного.

3.       Теперь, если Вы любите порядок, можете скопировать директорию c:/mysql в какое-нибудь более приличное место - например, f:/usr/local/. Только после этого строго следуйте указаниям в статье.

4.       Создайте в директории f:/usr/

такие два .bat-файла:

1.       server.bat:

2.       @echo off

3.       f:\usr\local\mysql\bin\mysqld.exe --basedir f:/usr/local/mysql


4.       f:\usr\local\apache\Apache.exe

5.       shutdown.bat:

6.       @echo off

7.       f:\usr\local\apache\Apache.exe -d f:\USR\LOCAL\APACHE -k shutdown

8.       "f:\usr\local\mysql\bin\mysqladmin.exe" -u root shutdown

Файл server.bat

Вы будете запускать, когда захотите "включить" Apache и одновременно MySQL (ясно, что бессмысленно запускать MySQL без сервера), а shutdown.bat - для завершения работы Apache и MySQL. Очень важно

завершать работу MySQL правильно - иначе могут быть испорчены таблицы баз данных. Собственно, для этого мы и сделали эти два .bat-файла. (Кстати говоря, в отличие от Apache, у MySQL нет своего окна - ее процесс можно увидеть, лишь нажав Ctrl+Alt+Del. Это еще одна причина существования shutdown.bat).

Теперь для удобства можно создать ярлыки на Рабочем столе для этих файлов. Рекомендуем также назначить этим ярлыкам "горячие" клавиши: например, для запуска сервера - Ctrl+Alt+A, а для завершения работы - Ctrl+Alt+S. Кроме того, лучше поставить у этих ярлыков параметры "Запускать свернутыми в значок". Все это сильно упростит жизнь в дальнейшем.

5.       Что ж, считайте, MySQL уже установлена. Осталось только создать базу данных. Для этого следует запустить f:/usr/local/mysql/bin/mysqladmin

с ключем create имя_базы. Например, если мы хотим создать базу testbase, нужно ввести:

6.       f:/usr/local/mysql/bin/mysqladmin create testbase

7.       Если Вы планируете использовать MySQL в скриптах на PHP, проверьте, раскомментирована ли в файле php3.ini

(расположенном в директории с PHP и в c:\windows) следующая строка:

8.       extension=php3_mysql.dll

Если в ее начале стоит точка с запятой, уберите ее - иначе PHP не сможет опознавать функции для работы с MySQL



Поздравляем - теперь можно работать! Если хотите, можете проверить работоспособность MySQL следующим скриптом на PHP3 (скажем, расположенном в f:/www/test.php3):

<?

Error_Reporting(1+2+4);

define("DBName","testbase");

define("HostName","localhost");

define("UserName","root");

define("Password","");

if(!mysql_connect(HostName,UserName,Password))

 { echo "Не могу соединиться с базой ".DBName."!<br>"; exit; }

// Создаем таблицу test. Если такая таблица уже есть, сообщение об ошибке будет

// подавлено, т.к. используется "@"

@mysql(DBName,"create table test(id int,a text)");

// Вставляем в таблицу 10 записей

for($i=0; $i<10; $i++)

 { $id=time();

   mysql(DBName,"insert into test(id,a) values($id,'Строка $i!')");

 }  

// Выводим все записи

$r=mysql(DBName,"select * from test");

for($i=0; $i<mysql_numrows($r); $i++)

 { $f=mysql_fetch_array($r);

   echo "$f[id] -> $f[a]<br>\n";

 }

 

?>

Обращаем Ваше внимание на макросы DBName, HostName, UserName и Password. DBName должен содержать имя базы данных. HostName - всегда localhost, ведь мы работаем на локальном компьютере. В макросе UserName проще всего подставлять root, который является собственником всех таблиц. При установке MySQL пользователю root не назначается пароль, так что макрос Password равен пустой строке.

Virtual Host examples for common setups

Base configuration

·         IP-based vhosts only

·         Name-based vhosts only

·         Mixed name-/IP-based vhosts

·         Port-based vhosts

Additional features

·         Using _default_ vhosts

·         Migrating a named-based vhost to an IP-based vhost



·         Using the ServerPath

directive

IP-based vhosts only

·         Setup 1: The server machine has two IP addresses (111.22.33.44

and 111.22.33.55) which resolve to the names server.domain.tld

and www.otherdomain.tld

respectively. The hostname www.domain.tld

is an alias (CNAME) for server.domain.tld

and will represent the main server.

Server configuration:

    ...

    Port 80

    DocumentRoot /www/domain

    ServerName www.domain.tld

    <VirtualHost 111.22.33.55>

    DocumentRoot /www/otherdomain

    ServerName www.otherdomain.tld

    ...

    </VirtualHost>

   

www.otherdomain.tld can only be reached through the address 111.22.33.55, while www.domain.tld can only be reached through 111.22.33.44

(which represents our main server).

·         Setup 2: Same as setup 1, but we don't want to have a dedicated main server.

Server configuration:

    ...

    Port 80

    ServerName server.domain.tld

   

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/domain

    ServerName www.domain.tld

    ...

    </VirtualHost>

    <VirtualHost 111.22.33.55>

    DocumentRoot /www/otherdomain

    ServerName www.otherdomain.tld

    ...

    </VirtualHost>

   

The main server can never catch a request, because all IP addresses of our machine are in use for IP-based virtual hosts (only localhost requests can hit the main server).

·         Setup 3: The server machine has two IP addresses (111.22.33.44

and 111.22.33.55) which resolve to the names server.domain.tld

and www-cache.domain.tld

respectively. The hostname www.domain.tld

is an alias (CNAME) for server.domain.tld

and will represent the main server. www-cache.domain.tld

will become our proxy-cache listening on port 8080, while the web server itself uses the default port 80.

Server configuration:



    ...

    Port 80

    Listen 111.22.33.44:80

    Listen 111.22.33.55:8080

    ServerName server.domain.tld

   

    <VirtualHost 111.22.33.44:80>

    DocumentRoot /www/domain

    ServerName www.domain.tld

    ...

    </VirtualHost>

    <VirtualHost 111.22.33.55:8080>

    ServerName www-cache.domain.tld

    ...

      <Directory proxy:>

      order deny,allow

      deny from all

      allow from 111.22.33

      </Directory>

    </VirtualHost>

   

The main server can never catch a request, because all IP addresses (apart from localhost) of our machine are in use for IP-based virtual hosts. The web server can only be reached on the first address through port 80 and the proxy only on the second address through port 8080.

Name-based vhosts only

·         Setup 1: The server machine has one IP address (111.22.33.44) which resolves to the name server.domain.tld. There are two aliases (CNAMEs) www.domain.tld

and www.sub.domain.tld

for the address 111.22.33.44.

Server configuration:

    ...

    Port 80

    ServerName server.domain.tld

    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/domain

    ServerName www.domain.tld

    ...

    </VirtualHost>

   

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/subdomain

    ServerName www.sub.domain.tld

    ...

    </VirtualHost>

   

Apart from localhost

there are no unspecified addresses/ports, therefore the main server only serves localhost requests. Due to the fact that www.domain.tld has the highest priority it can be seen as the default or primary server.

·         Setup 2: The server machine has two IP addresses (111.22.33.44

and 111.22.33.55) which resolve to the names server1.domain.tld

and server2.domain.tld

respectively. The alias www.domain.tld

should be used for the main server which should also catch any unspecified addresses. We want to use a virtual host for the alias www.otherdomain.tld



and one virtual host should catch any request to hostnames of the form *.sub.domain.tld with www.sub.domain.tld as its server name. The address 111.22.33.55

should be used for the virtual hosts.

Server configuration:

    ...

    Port 80

    ServerName www.domain.tld

    DocumentRoot /www/domain

    NameVirtualHost 111.22.33.55

    <VirtualHost 111.22.33.55>

    DocumentRoot /www/otherdomain

    ServerName www.otherdomain.tld

    ...

    </VirtualHost>

  

    <VirtualHost 111.22.33.55>

    DocumentRoot /www/subdomain

    ServerName www.sub.domain.tld

    ServerAlias *.sub.domain.tld

    ...

    </VirtualHost>

   

Any request to an address other than 111.22.33.55 will be served from the main server. A request to 111.22.33.55

with an unknown or no Host: header will be served from www.otherdomain.tld.

Mixed name-/IP-based vhosts

·         Setup: The server machine has three IP addresses (111.22.33.44, 111.22.33.55 and 111.22.33.66) which resolve to the names server.domain.tld, www.otherdomain1.tld and www.otherdomain2.tld respectively. The address 111.22.33.44

should we used for a couple of name-based vhosts and the other addresses for IP-based vhosts.

Server configuration:

    ...

    Port 80

    ServerName server.domain.tld

    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/domain

    ServerName www.domain.tld

    ...

    </VirtualHost>

  

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/subdomain1

    ServerName www.sub1.domain.tld

    ...

    </VirtualHost>

   

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/subdomain2

    ServerName www.sub2.domain.tld

    ...

    </VirtualHost>

 

    <VirtualHost 111.22.33.55>

    DocumentRoot /www/otherdomain1

    ServerName www.otherdomain1.tld

    ...

    </VirtualHost>

   

    <VirtualHost 111.22.33.66>



    DocumentRoot /www/otherdomain2

    ServerName www.otherdomain2.tld

    ...

    </VirtualHost>    

   

Port-based vhosts

·         Setup: The server machine has one IP address (111.22.33.44) which resolves to the name www.domain.tld. If we don't have the option to get another address or alias for our server we can use port-based vhosts if we need a virtual host with a different configuration.

Server configuration:

    ...

    Listen 80

    Listen 8080

    ServerName www.domain.tld

    DocumentRoot /www/domain

    <VirtualHost 111.22.33.44:8080>

    DocumentRoot /www/domain2

    ...

    </VirtualHost>

   

A request to www.domain.tld

on port 80 is served from the main server and a request to port 8080 is served from the virtual host.

Using _default_ vhosts

·         Setup 1: Catching every request to any unspecified IP address and port, i.e., an address/port combination that is not used for any other virtual host.

Server configuration:

    ...

    <VirtualHost _default_:*>

    DocumentRoot /www/default

    ...

    </VirtualHost>

   

Using such a default vhost with a wildcard port effectively prevents any request going to the main server.

A default vhost never serves a request that was sent to an address/port that is used for name-based vhosts. If the request contained an unknown or no Host: header it is always served from the primary name-based vhost (the vhost for that address/port appearing first in the configuration file).

You can use AliasMatch or RewriteRule to rewrite any request to a single information page (or script).

·         Setup 2: Same as setup 1, but the server listens on several ports and we want to use a second _default_ vhost for port 80.

Server configuration:

    ...

    <VirtualHost _default_:80>

    DocumentRoot /www/default80

    ...

    </VirtualHost>



   

    <VirtualHost _default_:*>

    DocumentRoot /www/default

    ...

    </VirtualHost>   

   

The default vhost for port 80 (which must appear before any default vhost with a wildcard port) catches all requests that were sent to an unspecified IP address. The main server is never used to serve a request.

·         Setup 3: We want to have a default vhost for port 80, but no other default vhosts.

Server configuration:

    ...

    <VirtualHost _default_:80>

    DocumentRoot /www/default

    ...

    </VirtualHost>

   

A request to an unspecified address on port 80 is served from the default vhost any other request to an unspecified address and port is served from the main server.

Migrating a name-based vhost to an IP-based vhost

·         Setup: The name-based vhost with the hostname www.otherdomain.tld

(from our name-based example, setup 2) should get its own IP address. To avoid problems with name servers or proxies who cached the old IP address for the name-based vhost we want to provide both variants during a migration phase.

The solution is easy, because we can simply add the new IP address (111.22.33.66) to the VirtualHost

directive.

Server configuration:

    ...

    Port 80

    ServerName www.domain.tld

    DocumentRoot /www/domain

    NameVirtualHost 111.22.33.55

    <VirtualHost 111.22.33.55 111.22.33.66>

    DocumentRoot /www/otherdomain

    ServerName www.otherdomain.tld

    ...

    </VirtualHost>

  

    <VirtualHost 111.22.33.55>

    DocumentRoot /www/subdomain

    ServerName www.sub.domain.tld

    ServerAlias *.sub.domain.tld

    ...

    </VirtualHost>

   

The vhost can now be accessed through the new address (as an IP-based vhost) and through the old address (as a name-based vhost).

Using the ServerPath

directive

·         Setup: We have a server with two name-based vhosts. In order to match the correct virtual host a client must send the correct Host:



header. Old HTTP/1. 0 clients do not send such a header and Apache has no clue what vhost the client tried to reach (and serves the request from the primary vhost). To provide as much backward compatibility as possible we create a primary vhost which returns a single page containing links with an URL prefix to the name-based virtual hosts.

Server configuration:

    ...

    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>

    # primary vhost

    DocumentRoot /www/subdomain

    RewriteEngine On

    RewriteRule ^/.* /www/subdomain/index.html

    ...

    </VirtualHost>

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/subdomain/sub1

    ServerName www.sub1.domain.tld

    ServerPath /sub1/

    RewriteEngine On

    RewriteRule ^(/sub1/.*) /www/subdomain$1

    ...

    </VirtualHost>

    <VirtualHost 111.22.33.44>

    DocumentRoot /www/subdomain/sub2

    ServerName www.sub2.domain.tld

    ServerPath /sub2/

    RewriteEngine On

    RewriteRule ^(/sub2/.*) /www/subdomain$1

    ...

    </VirtualHost>

   

Due to the ServerPath directive a request to the URL http://www.sub1.domain.tld/sub1/

is always

served from the sub1-vhost.

A request to the URL http://www.sub1.domain.tld/

is only served from the sub1-vhost if the client sent a correct Host: header. If no Host:

header is sent the client gets the information page from the primary host.

Please note that there is one oddity: A request to http://www.sub2.domain.tld/sub1/

is also served from the sub1-vhost if the client sent no Host:

header.

The RewriteRule

directives are used to make sure that a client which sent a correct Host: header can use both URL variants, i.e., with or without URL prefix.


Установка Perl


Это совсем просто, за исключением, может быть, выбора директории для Perl. А именно, Вы ДОЛЖНЫ разместить Perl в той же директории, в которой он находится на Вашем настоящем Web-сервере. Заметьте, что это очень важно, так как Perl требует, чтобы в каждом скрипте первой строкой стоял путь к Perl-интерпретатору; например, эта строка может выглядеть так:

#!/usr/local/bin/perl

Эту же строку можно было бы написать и так:

#!/usr/local/bin/perl.exe

или даже так:

#!f:\usr\local\bin\perl.exe

Это заставляет искать Perl-интерпретатор в директории f:/usr/local/bin/

(если диск f: не указан, это означает, что он совпадает с диском, на котором расположен Apache). Ясно, что если Вы установите Perl не в такую же директорию, как на настоящем Web-сервере, Вам придется каждый раз менять эту самую первую строку во всех скриптах при закачке их на сервер. Итак, далее мы будем считать, что эта директория такова, как на большинстве Apache-серверов:

f:/usr/local/bin

ВНИМАНИЕ:

очень распространенной ошибкой является установка Perl не в ту директорию или не на тот диск. Еще раз обращаем внимание на то, где должен быть расположен транслятор. Если Вы все же по какой-то необъяснимой причине не придерживаетесь нашего совета, то проверьте первую строку в Вашем скрипте. Она должна указывать не на директорию с Perl, а на исполнимый файл perl.exe. Напоминаем, что

#!/usr/local/bin/perl

заставляет искать Perl-интерпретатор perl.exe

в директории f:/usr/local/bin/, а не f:/usr/local/bin/perl

Если Вы все же установите пути неправильно, Apache выдаст непонятное сообщение об ошибке, а в errors.log

появится сообщение: couldn't spawn child process.

Вот шаги, приводящие к цели:

1.

Первым делом создайте директорию

f:/usr/local/bin

Затем скачайте дистрибутив Perl - файл с именем perl_setup.exe (436.137 байт), желательно в только что созданную директорию. Это саморазворачивающийся архив, Вам нужно будет просто его запустить, чтобы разархивировать в текущую директорию.

2.       Теперь настроим сервер. Найдите в файле конфигурации Apache conf/httpd.conf

строчку

AddHandler cgi-script .bat .exe

Замените ее на

AddHandler cgi-script .bat .exe .pl .cgi

Как это ни странно, но эту директиву AddHandler

иногда указывать не обязательно. Однако лучше перестраховаться...

Вот, собственно, и все. Можете пользоваться Perl-транслятором. Для проверки его работоспособности используйте такой скрипт (помещенный, разумеется, в директорию cgi-bin или аналогичную):

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";

print "It works!<br>\n";

system("dir");



Установка PHP


1.

Создайте директорию f:/usr/local/php3

(если хотите другое имя, см. рассуждения выше). Это - та директория, в которую будет установлен PHP.

2.       Скачайте дистрибутив PHP - файл с именем php3_setup.exe (1.970.356 байт), желательно в только что созданную директорию. Это саморазворачивающийся zip-архив, который Вы должны будете запустить, чтобы разархивировать. По умолчанию он развернется в текущую директорию, так что будьте внимательны.

3.       Еще раз напоминаем: если Вы решили установить PHP в другую директорию, Вам необходимо вручную отредактировать файл php_iis_reg.inf

с целью замены в нем имен директории на нужную (см. выше).

4.       В файле php3.ini из дистрибутива есть закомментированные строки, выглядящие так:

;extension=имя_модуля.dll

Если Вы хотите включить какой-нибудь модуль (по умолчанию уже включена поддержка GD и mSQL), раскомментируйте соответствующую строку (уберите точку с запятой).

5.       Теперь в Проводнике Windows нажмите правой кнопкой мыши на файле php_iis_reg.inf и выберите в контекстном меню пункт Установить - этим Вы автоматически добавите в Реестр некоторые установки, касающиеся PHP.

6.       Скопируйте файл php3.ini в каталог с Windows (например, в c:\windows);



В отличие от установки Apache,


В отличие от установки Apache, установка PHP короче, однако мы бы не сказали, что проще. Дело в том, что, во-первых, у PHP нет нормальной setup-программы, как у Apache, а во-вторых, при его установке необходимо также настраивать сервер.

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

f:/usr/local/php3

Если Вы физически не можете или просто не хотите иметь такой каталог (хотя, если Вы читали инструкцию по установке Apache, все должно быть в порядке), то Вы вольны установить PHP в другой каталог, но тогда Вам предстоит следующее: в файле php_iis_reg.inf из дистрибутива PHP найти ВСЕ строки "f:/usr/local/php3"

(их там, кстати, 6 штук) и заменить их на тот каталог, где Вы предполагаете разместить PHP. Могу сразу сказать, что это не самое приятное провождение времени, но уж ничего не поделаешь, такова жизнь...

Как обычно, приведем по порядку те действия по установке PHP, которые у нас привели к результату.


Виртуальные хосты Apache - как это настроить?


"Виртуальные хосты - хосты, имеющие уникальный адрес

в Интернет, эмулируемые и поддерживаемые сервером"

Древнее языческое заклинание

Итак, Вы установили Apache. Получили, таким образом, директорию f:/www

для хранения документов и f:/cgi-bin

для CGI. Но вот беда: в Интернете вы поддерживаете несколько серверов, а Apache создал для вас только один. Конечно, можно структуру этих несколькох серверов хранить на одном сервере, однако проще и удобнее было бы создать несколько виртуальных хостов с помощью Apache, например, один с именем serv1 и адресом 127.0.0.2, а другой - с именем serv2 и адресом 127.0.0.3. (Конечно, вместо "serv1" и "serv2" Вам нужно будет указать желаемые имена Ваших виртуальных хостов. Советуем назвать их так же, как и на Вашем настоящем Web-сервере - это может многое упростить при программировании скриптов.)

Как это принято в Unix, каждый сервер будет представлен своим каталогом в директории f:/home с именем, совпадающим с именем сервера. Например, сервер serv1

будет храниться в директории f:/home/serv1, которую Вам необходимо создать прямо сейчас. В этой директории будут находиться:

1.       файл access.log с журналом доступа к виртуальному серверу.

2.       файл errors.log с журналом ошибок сервера.

3.       директория www, где будут храниться html-документы.

4.       директория cgi для хранения CGI-программ.

Последние две директории (www и cgi) Вам тоже необходимо создать прямо сейчас.

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

(см. выше), а также в некоторых файлах Windows. Вот необходимые действия:

1.       Откройте директорию f:\usr\local\apache\conf. Откройте находящийся там файл httpd.conf. Перейдите в его конец, Вам предстоит добавить туда несколько строк.

2.       Пропишите следующие строки в конце файла после всех комментариев:


3.       #----serv1

4.       <VirtualHost 127.0.0.2>

5.         ServerAdmin webmaster@serv1.ru

6.         ServerName serv1

7.         DocumentRoot "f:/home/serv1/www"

8.         ScriptAlias /cgi/ "f:/home/serv1/cgi/"

9.         ErrorLog f:/home/serv1/error.log

10.      CustomLog f:/home/serv1/access.log common

11.    </VirtualHost>

При желании можно добавить и другие параметры (например, DirectoryIndex и т.д.) Вообще, не переопределенные параметры наследуются виртуальным хостом от главного.

12.    Теперь надо немного подправить системный файл hosts, который находится в C:\WINDOWS\hosts

(такого файла может не быть по умолчанию - в этом случае его надо создать). hosts - обычный текстовый файл, и в нем обычно заранее прописана только одна строка:

127.0.0.1       localhost

именно эта строка и задает соответствие имени localhost

адресу 127.0.0.1. (Ради справедливости следует сказать, что имя localhost работает и без указанной выше строки. Ну и выдумщики же эти парни из фирмы Microsoft!) Для нашего виртуального хоста надо добавить соответствующую строчку, чтобы файл выглядел так:

127.0.0.1       localhost

127.0.0.2       serv1

Этим Вы создадите виртуальных хост со следующими свойствами:

1.       Имя - serv1

2.       Доступен по адресу http://serv1 (или http://127.0.0.2).

3.       Расположен, соответственно, в директории f:/home/serv1.

4.       Директория для хранения документов - f:/home/serv1/www, доступная по адресу http://serv1/.

5.       Директория для CGI - f:/home/serv1/cgi, доступная по адресу http://serv1/cgi/

6.       Файлы журналов хранятся в f:/home/serv1

Ну вот, мы создали один виртуальный хост! Если будет необходимо сделать второй, нужно просто проделать аналогичные действия, заменив параметры, связанные с расположением хоста на диске. Главное, не забудьте в этом случае указать другой IP-адрес (лучше всего указывать их последовательно, начиная с 127.0.0.2, затем 127.0.0.3 и т.д. - в этом случае все работает корректно). Желательно также для этих целей не указывать IP-адрус http://127.0.0.1, так как это - адрес главного сервера.

Кстати, необходимо заметить, что главный хост (невиртуальный, тот, который мы создали в раздулах 1 и 2) по-прежнему доступен по адресу http://127.0.0.1

или http://localhost. Более того, его директория cgi-bin

"видна" всем созданным виртуальным хостам, так что Вы можете ее использовать.


Введение - зачем нужен домашний виртуальный сервер?


"Ну к чему все это, лучше бы водки выпили"

Из писем Белинского Гоголю

Если Вы читаете этот документ, а также если у Вас установлен Windows 95/98 (а наше личное мнение такое, что эта операционная система наиболее сбалансирована с точки зрения интерфейса и удобства работы), значит, Вы уже столкнулись с проблемой виртуального домашнего сервера, а точнее, с проблемой его отсутствия! Эта небольшая статья поможет Вам скачать и установить один из лучших серверов - Apache, а также те приложения, из-за отсутствия которых народ в бешенстве сметает все остальные сервера (например, Sambar Server) со своего многострадального жесткого диска и устанавливает Apache для Windows 95/98. Имеются в виду, конечно, Perl, PHP3 и MySQL, также работающие под Windows. Прочитав эту статью и скачав дистрибутивы, Вы будете вооружены всеми инструментами, которые так необходимы для профессиональной работы в Web!

Обращаем Ваше внимание: бытует мнение, что MySQL (а тем более для Windows 95/98) нельзя получить бесплатно, а можно только купить. Так вот, можете вздохнуть с облегчением: MySQL для Windows 95/98 существует, и ее установка не будет стоить Вам и копейки!

Поговорим теперь с теми пользователями Windows 95/98, которые заглянули сюда из простого любопытства. Часто возникает ситуация, когда необходимо проверить полный вид html-страницы. Однако чаще всего это невозможно при работе дома - технологии SSI, CGI и, конечно, PHP, например, точно требуют сервера. Как же быть? Не стоит впадать в апатию - нужно просто установить на Ваш домашний компьютер (пусть даже и не подключенный к Интернет) специальную программу - Web-сервер. Вообще-то серверов существует множество - плохие и хорошие, медленные и быстрые... Мы же выбрали сервер, подходящий под последние две категории, - Apache. Самое главное то, что это чуть ли не единственный сервер, который позволяет работать в Windows 95/98 с технологиями PHP, CGI и Perl-скриптами одновременно так же просто и непринужденно, как будто у Вас стоит Unix.