Урок 1: Установка и настройка веб-сервера Apache

Замечания

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

Ну что ж, мы поговорили достаточно о веб-сервере, пришло время его нам установить и опробовать в деле. Существует сформировавшийся перечень наиболее распространенных веб-серверов, при выборе во внимание принимаются конкретные задачи, под которые он разворачивается. Остановим наш выбор на бесплатном веб-сервере Apache. Считаю его идеальным для сайтов начального и среднего уровня. Конечно, можно пойти легким путем — установить готовый комбайн Denwer, как это делает большинство новичков, но в нашем случае помимо результата важны также и теоретические знания. А после сегодняшнего урока ваш скилл повысится однозначно :)

Идем на страницу загрузки проекта — http://httpd.apache.org/download.cgi и качаем последнюю стабильную версию под Windows в виде MSI инсталлятора (в моем случае это был apache_2.2.14-win32-x86-no_ssl.msi). Начнем установку. Первый диалог, который может ввести нас в заблуждение — это диалог ввода информации о сервере:

Конфигурировать наш сервер мы будем после установки, а сейчас давайте не будем особо париться и впишем в поля "Network Domain" и "Server Name" localhost, а в поле "Administrator's Email Address" ваш адрес электронной почты (о том, что такое localhost, речь пойдет позже). Нижние переключатели не трогаем. Жмем "Next", соглашаемся с типичной установкой, еще раз "Next". Инсталлятор предложит выбрать директорию, в которую будет установлен веб-сервер:

На мой взгляд, путь слишком длинный, давайте сократим его до C:\Program Files\Apache. Продолжаем установку, дожидаемся ее окончания. После закрытия инсталлятора в трее появится значок Apache монитора:

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

Теперь давайте вспоминать то, о чем мы беседовали в статье "Принципы функционирования веб-сервера". Как вы помните, у каждого компьютера, подключенного к сети, есть свой IP-адрес. Но даже если ваш компьютер не имеет ни одного сетевого подключения, у него есть как минимум один внутренний IP-адрес. Этот адрес — 127.0.0.1. На всех компьютерах он одинаковый и указывает на сам компьютер. То есть, если сетевому клиентскому приложению указать адрес сервера 127.0.0.1, то клиент будет пытаться подключиться к серверу, расположенному на вашем же компьютере. Далее мы говорили о доменных именах, которые преобразуются в IP-адреса DNS-серверами. У внутреннего адреса 127.0.0.1 есть свое внутреннее доменное имя — localhost. При этом для преобразования этого имени в адрес компьютеру не нужно обращаться к DNS-серверу, так как это соответствие заложено в самом компьютере.

Давайте запустим веб-браузер и введем в адресную строку домен localhost:

Я надеюсь, вы понимаете, что произошло? Домен localhost преобразовался в IP-адрес 127.0.0.1, веб-браузер подключился к веб-серверу по этому адресу и 80 порту и запросил главную страницу с помощью протокола HTTP. То есть наш веб-сервер работает, он отправил браузеру страничку с надписью "It works" ("работает").

Приступим к настройке нашего веб-сервера, которая сводится к редактированию конфигурационных файлов Apache. Для начала необходимо обзавестись удобным, практичным и в то же время простым текстовым редактором. Если у вас такой уже есть — мои поздравления, если же вы несчастный пользователь Блокнота, могу предложить редактор AkelPad. Перейдите в папку C:\Program Files\Apache\conf и переименуйте файл httpd.conf в httpd.conf.bak, чтобы в случае чего иметь под рукой начальную конфигурацию. Создайте новый файл httpd.conf со следующим содержимым:

ServerRoot "C:/Program Files/Apache"

Listen 80

LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so

ServerName localhost

AccessFileName .htaccess

ServerTokens prod

LogLevel error
ErrorLog "logs/error.log"

DefaultType text/plain

AddDefaultCharset UTF-8

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule log_config_module>
    LogFormat "[VISIT]\nclient=%h\ntime=%{%d.%m.%Y %H:%M:%S}t\npage=%U%q\nreferer=%{Referer}i\nreqmethod=%m\nhost=%{Host}i\nagent=%{User-agent}i\n\n" mylog
</IfModule>

Разбираемся. ServerRoot — путь, куда установлен наш веб-сервер. Обратите внимание на слеши. Listern — указывается номер порта, который будет "слушать" веб-сервер, а также, если необходимо, IP-адрес (если у вашего компьютера несколько подключений и нужно принимать соединения только по одному из них). Мы указали порт 80, который является стандартным для веб-серверов. LoadModule загружает модуль веб-сервера, модули позволяют получить дополнительные возможности. В нашем конфигурационном файле прописан перечень стандартных модулей. AddDefaultCharset — кодировка по умолчанию, выставили юникод (UTF-8). Остальное пока нас мало волнует.

А теперь самое главное. Не забыли, для чего устанавливаем веб-сервер? Правильно, для работы над нашими будущими сайтами. Существует понятие корневой каталог — это каталог, где расположен контент сайта, то есть файлы, из которых он состоит. По умолчанию в нашем Apache корневым каталогом является каталог C:\Program Files\Apache\htdocs. Перейдя туда вы обнаружите там единственный файл под именем index.html. Это тот самый файл, который содержит главную страницу с надписью "It works" по адресу http://localhost. Дело в том, что если в запросе (который, кстати, называется url) отсутствует имя файла, то веб-сервер ищет файл с одним из стандартных имен. Эти имена (точнее, одно имя — index.html) прописаны у нас в конфигурационном файле:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

Таким образом, при запросе http://localhost веб-сервер будет искать файл C:\Program Files\Apache\htdocs\index.html, при запросе http://localhost/docsC:\Program Files\Apache\htdocs\docs\index.html (в том случае, если docs — папка), при запросе http://localhost/news.htmlC:\Program Files\Apache\htdocs\news.html и так далее.

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

Итак, localhost соответствует адресу 127.0.0.1, давайте создадим еще три внутренних домена test-domain1, test-domain2 и test-domain3, которые будут соответствовать этому же адресу. Откройте в текстовом редакторе файл C:\WINDOWS\system32\drivers\etc\hosts. В этом файле можно задать соответствия доменных имен и IP-адресов. Здесь же мы обнаружим то самое соответствие localhost адресу 127.0.0.1. Добавьте в конец файла строки:

127.0.0.1      test-domain1
127.0.0.1      test-domain2
127.0.0.1      test-domain3

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

Следующим шагом необходимо каждому доменному имени создать свой корневой каталог и сказать об этом нашему веб-серверу. Удаляем в папке C:\Program Files\Apache\htdocs файл index.html и создаем там три папки: test-domain1, test-domain2 и test-domain3, в каждой из этих папок папку log — для логов и папку www — собственно, корневой каталог для домена. В конце файла C:\Program Files\Apache\conf\httpd.conf дописываем следующее:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName test-domain1
    DocumentRoot "C:/Program Files/Apache/htdocs/test-domain1/www"
    ErrorLog "C:/Program Files/Apache/htdocs/test-domain1/log/error.log"
    CustomLog "C:/Program Files/Apache/htdocs/test-domain1/log/access.log" mylog

    <Directory "C:/Program Files/Apache/htdocs/test-domain1/www">
        AllowOverride All
        Options -Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName test-domain2
    DocumentRoot "C:/Program Files/Apache/htdocs/test-domain2/www"
    ErrorLog "C:/Program Files/Apache/htdocs/test-domain2/log/error.log"
    CustomLog "C:/Program Files/Apache/htdocs/test-domain2/log/access.log" mylog

    <Directory "C:/Program Files/Apache/htdocs/test-domain2/www">
        AllowOverride All
        Options -Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName test-domain3
    DocumentRoot "C:/Program Files/Apache/htdocs/test-domain3/www"
    ErrorLog "C:/Program Files/Apache/htdocs/test-domain3/log/error.log"
    CustomLog "C:/Program Files/Apache/htdocs/test-domain3/log/access.log" mylog

    <Directory "C:/Program Files/Apache/htdocs/test-domain3/www">
        AllowOverride All
        Options -Indexes
    </Directory>
</VirtualHost>

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

В корневом каталоге каждого домена создайте по файлу index.html с содержимым "Hello from test-domain1", "Hello from test-domain2" и ""Hello from test-domain3". Чтобы изменения в конфигурации вступили в силу, необходимо перезапустить Apache (левой кнопкой мыши по значку Apache монитора -> Restart). Если ошибок не было допущено, должно все работать:

Поздравляю, теперь у вас есть настроенный веб-сервер с тремя локальными хостами. Раздолье для веб-мастера :) Самое время приступить к изучению основ веб-строительства.

Комментарии

Оставить комментарий »

 
butuz
6 декабря 2012, 17:10
#91
 

Доброго дня. Спасибо за уроки — очень понятно и доходчиво, с большим терпением. Багаж по теме у меня нулевой, прошу помочь в следующем: в корневом каталоге (test-domain1) в папку www положены файлы прошивок ip-устройств, которые обращаются к этим прошивкам при инициализации. В данный момент я вижу только html файлы — последнняя тема)) что нужно выставить в DirectoryIndex, чтобы видеть всё содержимое папки www? Как проверить и настроить достижимость этого хоста с других подсетей?

На компе с Apache хосту test-domain1 назначил IP адрес 192.168.14.22 этой машины, как результат: с другого компа через браузер по ip адресу в hotdocs test-domain1 попадаю, а по имени (
http://test-domain1/) — нет. Что нужно посмотреть? Спасибо.

Joker-jar
7 декабря 2012, 15:42
#92
 

что нужно выставить в DirectoryIndex, чтобы видеть всё содержимое папки www?

Не совсем понятно. Для того, чтобы можно было просматривать содержимое директорий на веб-сервере в браузере, можете в конфиге соответствуюшего виртуального хоста "Options -Indexes" заменить на "Options +Indexes".

Как проверить и настроить достижимость этого хоста с других подсетей?

Все правильно сделали, нужно чтобы Apache прослушивал внешний IP-адре. Если по IP-адресу с другого компьютера сайт открывается, то все работает отлично. А по доменному имени невозможно обратиться с другого компьютера потому, что этот компьютер не может определить соответствие имени и IP-адреса. Тут есть несколько вариантов: точно также в файле hosts прописать соответствие доменных имен и IP-адресов (только использовать уже внешний IP-адрес веб-сервера), если это локальная сеть (судя по IP-адресу это локалка), то развернуть внутренний DNS-сервер, в котором создать запись соответствующего доменного имени и настроить компьютеры в сети для обращения к этому DNS-серверу. Ну или можно купить полноценный домен и привязать его к IP-адресу (только к локальному привязывать особо нет смысла, нужно к статичному глобальному IP-адресу).

Лаура
16 января 2013, 16:02
#93
 

Здраствуйте! У меня при запуске выдает ошибку the requested operation has failed!

Joker-jar
16 января 2013, 17:04
#94
 

Лаура, нужно смотреть ошибки в системном журнале:

Меню Моего компьютера → Управление → Просмотр событий → Приложение.

Назар
20 января 2013, 20:21
#95
 

Всем доброго времени суток.
Очень долго парился из-за того, что Apache вообще не хотел включаться. А все из-за того, что на сайте нет той версии с которой работают здесь .
Долго мучился в итоге нашел скачал и алилуйя все работает!!! =)
Вот ссылка именно на ту версию которая здесь опубликована:

http://archive.apache.org/dist/httpd/binaries/win32/apache_2.2.14-win32-x86-no_ssl.msi

Назар
20 января 2013, 21:08
#96
 

Помогите, вот такую ошибку выдает:

The Apache service named reported the following error:
>>> httpd.exe: Syntax error on line 5 of C:/Program Files (x86)/Apache/conf/httpd.conf: Cannot load C:/Program Files/Apache/modules/mod_actions.so into server: The specified module could not be found.

Что делать?

Лаура
22 января 2013, 14:41
#97
 

Это ошибка в папке log:

[Starting the Apache2.2 service
The Apache2.2 service is running.
rmine the server's fully qualified domain name, using 2.75.68.96 for ServerName
[Mon Jan 21 22:43:52 2013] [notice] Apache/2.2.14 (Win32) configured -- resuming normal operations
[Mon Jan 21 22:43:52 2013] [notice] Server built: Sep 28 2009 22:41:08
[Mon Jan 21 22:43:52 2013] [notice] Parent: Created child process 3340
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 2.75.68.96 for ServerName
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 2.75.68.96 for ServerName
[Mon Jan 21 22:43:52 2013] [notice] Child 3340: Child process is running
[Mon Jan 21 22:43:52 2013] [notice] Child 3340: Acquired the start mutex.
[Mon Jan 21 22:43:52 2013] [notice] Child 3340: Starting 64 worker threads.
[Mon Jan 21 22:43:52 2013] [notice] Child 3340: Starting thread to listen on port 80.
[Mon Jan 21 22:45:38 2013] [error] [client 127.0.0.1] File does not exist: C:/Program Files (x86)/Apache/htdocs/favicon.ico
[Mon Jan 21 23:29:12 2013] [notice] Parent: Received restart signal -- Restarting the server.
[Mon Jan 21 23:29:12 2013] [notice] Child 3340: Exit event signaled. Child process is ending.
httpd.exe: Syntax error on line 1 of C:/Program Files (x86)/Apache/conf/httpd.conf: ServerRoot must be a valid directory
[Mon Jan 21 23:29:12 2013] [warn] (OS 995)Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения.  : winnt_accept: Asynchronous AcceptEx failed.
[Mon Jan 21 23:29:13 2013] [notice] Child 3340: Released the start mutex
[Mon Jan 21 23:29:14 2013] [notice] Child 3340: All worker threads have exited.
[Mon Jan 21 23:29:14 2013] [notice] Child 3340: Child process is exiting

А это журнал :

The Apache service named  reported the following error:
>>> httpd.exe: Syntax error on line 1 of C:/Program Files (x86)/Apache/conf/httpd.conf: ServerRoot must be a valid directory
Erlan
22 января 2013, 15:09
#98
 

Просмотр событий:

The Apache service named  reported the following error:
>>> httpd.exe: Syntax error on line 1 of C:/Program Files (x86)/Apache/conf/httpd.conf: ServerRoot must be a valid directory
Joker-jar
22 января 2013, 19:23
#99
 

Назар, Лаура, Erlan, вы, похоже, все столкнулись с одной и той же сложностью. У вас, по всей видимости, 64-разрядная версия Windows, обратите внимание на путь к конфигу, особенно на папку "Program Files (x86)". Нужно в httpd.conf все "Program Files" заменить на "Program Files (x86)", должно помочь.

Erlan
22 января 2013, 20:50
 

В начале написала, но не заработало. Program Files (x86) с пробелом написала и все заработало. Спасибо!

Оставить комментарий

Ваше имя
 
Ваш e-mail
 
Комментарий