Установка веб-сервера Апачи на Windows

Все исходники / Multilanguage / OS Windows / Веб программирование / Веб-серверы / Установка веб-сервера Апачи на Windows

Сервер Apache

HTTP-сервер Apache — это программный проект благотворительного фонда США Apache Software Foundation (ASF), финансируемой за счет пожертвований и корпоративных спонсоров. Соучредитель ASF Брайан Белендорф первым придумал имя «Apache» для сервера. Название «апачи» было выбрано из почтения и признательности людям и племенам, которые называют себя «апачи».

По мере того, как Apache рос из патчей (заплаток), добавляемых к одному из первых серверов стандарта HTTP/1.0, постепенно из слухов родилась легенда, что «Apache» на самом деле означает «a patchy server» (неоднородный сервер).

Apache – веб-сервер с открытым исходным кодом для современных операционных систем, включая UNIX, Windows, Mac OS/X и Netware. Написан на языке С и является одним из самых популярных в мире веб-серверов. Сайт проекта Apache The Apache HTTP Server Project.

Статья описывает необходимый минимум для запуска веб-сервера версии 2.4.x на одном компьютере или в локальной сети операционной системы Windows.

Дистрибутивы Apache для Windows

Apache Software Foundation на своем официальном сайте предоставляет только исходные коды, но не бинарные файлы. Чтобы создать запускаемое приложение HTTP-сервера Apache для операционной системы Windows необходимо самостоятельно скомпилировать файлы прилагаемого исходного кода.

Компиляция исходного кода может оказаться непростой задачей и поэтому можно скачать готовые скомпилированные файлы групп разработчиков, указанных на официальном сайте Apache HTTP Server Project на странице Downloading Apache for Windows. Некоторые из них предоставляют инсталляторы полных комплектов ПО для веб-программирования, другие только скомпилированные модули Апачи .

Данная статья описывает настройку сервера, собранного из скомпилированных файлов группы разработчиков Apache Lounge. Бинарные файлы, создаваемые Apache Lounge из официальных исходников, поддерживаются в актуальном состоянии и содержат последние патчи и зависимости. Для загрузки предлагается выбор двоичных файлов приложения сервера Апачи для версий Win32 и Win64. Здесь же можно загрузить дополнительные модули расширения возможностей сервера.

Выбор папки установки

Дистрибутив веб-сервера Апачи можно установить в любой папке, на любом носителе локального компьютера. Затем настройки пути прописываются в файле конфигурации Папка_Установки_Apache/conf/httpd.conf. В этом же файле прописываются пути к веб-контенту базового и виртуальных хостов.

Пути к файлам хостинга можно определить также любые. Это удобно для использования общих веб-приложений, которые могут работать на разных серверах (IIS или Apache), например: phpMyAdmin.

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

Настройка веб-сервера Апачи

Запустить веб-сервер можно только после определения основных настроек:

Директива ServerRoot
Определяет каталог, в который были инсталлированы папки и файлы сервера. Для сборки Apache 2.4 и позже путь к каталогу сервера определяется в константе SRVROOT. В дальнейшем данная константа унифицирует строку пути до корневой папки сервера и позволяет избегать ошибок при повторяющихся вводах, например:
Define SRVROOT "G:/MyProjects/Hosting/Apache24"
ServerRoot "${SRVROOT}"
. . .
DocumentRoot "${SRVROOT}/htdocs"

Относительно корневого пути приложение веб-сервера Апачи получает путь к конфигурационному файлу и файлам логов (по умолчанию они находятся в подкаталогах conf/ и logs/ соответственно), к файлам модулей и другим необходимым для работы файлам.

Директива Listen

Предписывает серверу Apache прослушивать только определенные IP-адреса или порты. Listen является обязательной директивой и без ее определения запуск сервера завершится неудачей.

По умолчанию в файле конфигурации сервера Apache директива разрешает отвечать на запросы на любом IP-адресе устройства на порту 80:

Listen 80
# или так
#Listen *:80

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

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

Listen 127.0.0.1:80

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

Директива DirectoryIndex
Перенаправляет запрос к индексному файлу если запрашивается каталог. DirectoryIndex устанавливает имя файла, который будет вызваться по умолчанию:
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

dir_module – это идентификатор модуля mod_dir.so. Соответственно, чтобы происходило автоматическое перенаправление на индексные файлы модуль mod_dir.so должен быть включен в файле конфигурации сервера httpd.conf:

LoadModule dir_module modules/mod_dir.so

 

Директива AddDefaultCharset
Определяет кодировку символов по умолчанию для запросов веб-страниц. Настройка кодировки заключается в добавлении директивы в файл httpd.conf, например:
AddDefaultCharset  UTF-8

После данных настроек HTTP-сервер Апачи готов к запуску. Можно использовать два варианта запуска: сервер как консольное приложение или как служба операционной системы Windows.

Запуск Апачи как приложение

Приложение запускается с командной строки. Для этого в окне командной строки перейти в каталог bin с исполняемым файлом httpd.exe:

C:\Users\UserPC>cd /d G:\MyProjects\Hosting\Apache24\bin
G:\MyProjects\Hosting\Apache24\bin>httpd.exe

Вызвать окно командной строки сразу в подкаталоге bin можно набрав команду cmd в адресной строке проводника Windows при открытой папки исполняемого файла httpd.exe и нажать Enter: Запуск командной строки из папки bin сервера Апачи

Отследить работающий сервер можно по работе сайтов либо в окне Диспетчера задач. Останавливается сервер Апачи в данном варианте запуска сочетанием клавиш Control + C в окне консоли с которой был запущен сервер либо классическим закрытием окна кнопкой-крестиком Закрыть. Перезапуск сервера при изменении файла конфигурации или других настроек производится клавишами Control + Break при активном окне консоли.

Для удобства можно создать ярлык на рабочем столе, указывающий на исполняемый файл приложения сервера. Запуск сервера в режиме консольного приложения не требует прав администратора. Обратите внимание, что при запуске сервера с ярлыка появится окно консольного приложения, но не командной строки. Закрытие и перезагрузка сервера производится сочетанием клавиш Control + C и Control + Break соответственно, в окне консоли. Окно будет оставаться видимым до тех пор, пока вы не остановите Apache.

Запуск Апачи как служба

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

httpd.exe -k install
Удаление производится командой:
httpd.exe -k uninstall

Запуск, перезапуск, остановка осуществляется командами в окне командной строки находясь в подкаталоге bin установленного экземпляра Апачи :

httpd.exe -k start
httpd.exe -k restart
httpd.exe -k stop

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

Запуск: G:\MyProjects\Hosting\Apache24\bin\httpd.exe -k start
Рестарт: G:\MyProjects\Hosting\Apache24\bin\httpd.exe -k restart
Остановка: G:\MyProjects\Hosting\Apache24\bin\httpd.exe -k stop

На вашем устройстве пути до исполняемого файла соответственно будут другие. Ярлыки с командами для запуска сервера как служба требуют права администратора.

Окно монитора служб АпачиВ комплекте с приложением Апачи идет утилита наблюдения за службами сервера под названием Apache Service Monitor. С помощью монитора можно наблюдать и управлять состоянием всех установленных служб Apache с отслеживанием статистики запусков и перезагрузок.

Apache Service Monitor позволяет запускать, перезапускать и останавливать службу Апачи. Запущенный монитор всегда находится на панели задач в системном трее. Данная утилита применима только в режимах запуска сервера в роли службы.

Утилиту можно добавить в автозапуск при загрузке операционной системы Windows. Для этого откройте каталог установки сервера Апачи и перейдите в подкаталог bin, где находится исполняемый файл ApacheMonitor.exe, затем командой из контекстного меню создайте для него ярлык. Нажмите клавиши Windows + R, в открывшемся окне напечатайте shell:startup, затем нажмите ОК. Откроется папка Автозагрузка, скопируйте и вставьте созданный ярлык файла ApacheMonitor.exe в папку Автозагрузка.

Ошибки при запуске Апачи

Для отслеживания ошибок при первых стартах сервера Апачи лучше запускать его с помощью командной строки, в котором печатаются ошибки, возникшие во время старта сервера. Apache Service Monitor в таких случаях выводит окно с малополезной информацией: Error. The requested operation has failed!.

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

chcp 1251

Наиболее частые ошибки при запуске сервера Апачи:

Ошибки при установке и удалении службы
Данные ошибки возникают при запуске командной строки без прав администратора.
G:\MyProjects\Hosting\Apache24\bin>chcp 1251
Текущая кодовая страница: 1251
G:\MyProjects\Hosting\Apache24\bin>httpd.exe -k install
Installing the 'Apache2.4' service
(OS 5)Отказано в доступе.  : AH00369: Failed to open the Windows service manager, perhaps you forgot to log in as Administrator? (Не удалось открыть диспетчер служб Windows, возможно, вы забыли войти в систему как администратор?) 
Ошибка при удалении службы:
G:\MyProjects\Hosting\Apache24\bin>chcp 1251
Текущая кодовая страница: 1251
G:\MyProjects\Hosting\Apache24\bin>httpd.exe -k uninstall
Removing the 'Apache2.4' service
(OS 5)Отказано в доступе.  : AH10010: Failed to open the 'Apache2.4' service
Ошибки запуска. Сервер пытается прослушивать занятый порт 80
Ошибка случается при запуске Апачи посредством командной строки, как приложения или как службы:
G:\MyProjects\Hosting\Apache24\bin>chcp 1251
Текущая кодовая страница: 1251
G:\MyProjects\Hosting\Apache24\bin>httpd.exe
G:\MyProjects\Hosting\Apache24\bin>httpd.exe -k start
(OS 10013)Сделана попытка доступа к сокету методом, запрещенным правами доступа.  : AH00072: make_sock: could not bind to address [::]:80
(OS 10013)Сделана попытка доступа к сокету методом, запрещенным правами доступа.  : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
При ошибке запуска на занятом порту, веб-сервер должен успешно запускаться на любом свободном номере порта от 1024 до 65535, например:
Listen 127.0.0.1:8000 

Определить приложение, занимающее интересующий порт поможет утилита Windows Монитор Ресурсов, которая отображает все прослушиваемые порты операционной системы с именами и идентификаторами рабочих процессов. Вызывается утилита правой кнопкой на меню Пуск->Выполнить и в открывшемся окне напечатать команду resmon.exe, нажать кнопку Ok.

Монитор ресурсов процесс System на порту 80 На картинке видно, что процесс System с PID 4 прослушивает порт 80, из-за чего сервер Апачи не может успешно стартовать. Под процессом System PID 4 с портами 80 могут работать:

  • - Службы SQL Server Reporting Services (SQLEXPRESS_XXXX) (имя службы ReportServer$SQLEXPRESS_XXXX)
  • - Служба веб-публикаций(имя службы W3SVC)
  • - Диспетчер служб IIS

Список не является исчерпывающим и зависит от конфигурации вашей операционной системы. После закрытия приложений и остановку служб занимающих порт 80 сервер Апачи запустится успешно.

Несколько веб-сайтов на localhost

Для работы на локалке с разными сайтами необходимо в конфигурационном файле веб-сервера Апачи определять виртуальные хосты и регистрировать желаемые веб-имена в файле hosts (файл hosts). Без создания виртуальных хостов все веб-имена, зарегистрированные в операционной системе Windows, будут ссылаться на документы, находящиеся в папке основного хоста DocumentRoot "${SRVROOT}/htdocs".

Для создания виртуальных хостов служит директива <VirtualHost>. . .</VirtualHost> определяющая область действия групп директив для конкретного хоста. Виртуальные хосты могут быть созданы на основе разных IP, имен сайтов и портов. Рекомендуемая форма определения директивы виртуальных хостов:

<VirtualHost IP:Port>
    DocumentRoot "Путь к документам"
    ServerName доменное-имя
    . . .
</VirtualHost>

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

<VirtualHost 192.168.1.35:80>
    DocumentRoot "G:\MyProjects\Hosting\IIS\localpythonsite"
    ServerName localpythonsite
    # Для виртуального хоста можно определить 
    # собственную кодировку, отличную от настроек других
    # вирутальных хостов.
    AddDefaultCharset utf-8

    # Other directives here
    <Directory />
        Require all granted	

    </Directory>
</VirtualHost>
. . .
<VirtualHost 192.168.1.35:80>
    DocumentRoot "G:\MyProjects\Hosting\IIS\localphpmyadmin"
    ServerName localphpmyadmin

    # Other directives here
    <Directory />
        Require all granted	
        AllowOverride All
    </Directory>
</VirtualHost>

То же самое, но область запросов ограничена собственным устройством:

<VirtualHost 127.0.0.1:80>
    DocumentRoot "G:\MyProjects\Hosting\IIS\localpythonsite"
    ServerName localpythonsite
    . . .
    <Directory />
        . . .
    </Directory>
</VirtualHost>

<VirtualHost 127.0.0.1:80>
    DocumentRoot "G:\MyProjects\Hosting\IIS\localphpmyadmin"
    ServerName localphpmyadmin

    # Other directives here
    <Directory />
        . . .
    </Directory>
</VirtualHost>

Необходимо отметить, что если общее прослушивание веб-сервера Апачи определено как Listen *:80, то базовый веб-ресурс будет всегда доступен по локальной сети.

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

Настройки директивы <Directory>

<Directory> - группа директив, которые применяются только к указанному каталогу файловой системы, подкаталогам и их содержимому. Может определяться для каждого виртуального хоста отдельно. Основные директивы, используемые внутри <Directory>:

Require all
  •         Require all granted – доступ всем разрешено
  •         Require all denied – доступ всем отказан
По умолчанию в файле конфигурации httpd.conf веб-сервера Апачи установлен запрет доступа ко всем директориям:
<Directory />
    AllowOverride none
    Require all denied
</Directory>

Для конкретного каталога необходимо дополнительно разрешать доступ. Можно запретить доступ к отдельным каталогам, например:

# Определение сайтов на локалке
<VirtualHost 127.0.0.1:80>
    DocumentRoot "${SRVROOT}/htdocs"
    ServerName localhost

    # Все директории доступны
    <Directory />
        Require all granted	
    </Directory>

    # Но к директории /1 относительно корневого каталога доступ запрещен.
    <Directory "${SRVROOT}/htdocs/1">	
        Require all denied
    </Directory>
</VirtualHost>

 

AllowOverride

Директива позволяет переопределить настройки общего конфигурационного файла httpd.exe веб-сервера Apache для конкретного каталога через файл .htaccess. В нем вы можете переопределить практически все настройки веб-сайта, например: настройки PHP, создать перезапись URL-адресов и т. д.

Когда для директивы AllowOverride задано значение None, файлы .htaccess полностью игнорируются. В этом случае сервер даже не будет пытаться читать .htaccess. При значении AllowOverride All файлы .htaccess позволяют вносить изменения в конфигурацию для каждого каталога, игнорируя настройки базового файла httpd.conf.

Разработчики HTTP-сервера Apache рекомендуют полностью избегать использования .htaccess файлов, если у вас есть доступ к файлу конфигурации основного сервера httpd.conf. Использование .htaccess замедляет работу сервера, поскольку при каждом запросе URI сервер будет проверять файлы .htaccess во всех подкаталогах, встречающихся на пути до директории конечного ресурса. Например: alltech.com/moto/harley-davidson/streetbob – 4 проверки присутствия в каталогах файлов .htaccess.

Логи доступа и ошибок

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

<VirtualHost 127.0.0.1:80>
    # Здесь также можно определять константы
    Define DR "G:\MyProjects\Hosting\IIS\localphpmyadmin"
    DocumentRoot "${DR}"
    ServerName localphpmyadmin
    ErrorLog "${DR}\logs\error.log"
    CustomLog "${DR}\logs\access.log" common

    # Other directives here
    <Directory />
        Require all granted	
        AllowOverride All
    </Directory>
</VirtualHost>

Файл конфигурации httpd.conf

В качестве наглядного примера к статье прикреплен файл конфигурации http.conf, вам только необходимо прописать в нем пути до вашего каталога установки компонентов HTTP-сервера Апачи.

Скачать исходник