Использование Apache HTTP Server в Microsoft Windows
В этом документе объясняется, как установить, настроить и запустить Apache 2.4 в Microsoft Windows. Если после изучения документации (а также журналов событий и ошибок) у вас останутся вопросы, обратитесь в список рассылки пользователей, поддерживаемый сообществом.
Предполагается, что вы устанавливаете бинарный дистрибутив Apache. Если вы хотите самостоятельно скомпилировать Apache (возможно, чтобы помочь в разработке или найти ошибки), см. раздел Компиляция Apache для Microsoft Windows.
Требования к операционной системе
Основной платформой Windows для запуска Apache 2.4 является Windows 2000 или более поздняя версия. Во избежание ошибок операционной системы всегда загружайте и устанавливайте актуальный пакет обновления.
Загрузка Apache для Windows
Сам проект Apache HTTP Server не предоставляет бинарные выпуски программного обеспечения — только исходный код. Отдельные участники проекта могут предоставлять бинарные пакеты для удобства, однако они не входят в состав выпуска.
Если вы не можете самостоятельно скомпилировать Apache HTTP Server, бинарный пакет можно получить из многочисленных дистрибутивов, доступных в Интернете.
К популярным вариантам развертывания Apache httpd и, при необходимости, PHP и MySQL в Microsoft Windows относятся:
Настройка Apache для Windows
Конфигурация Apache задается файлами в подкаталоге conf. Это те же файлы, что используются для настройки версии Unix, но в Apache для Windows есть несколько отличающихся директив. Полный список доступных директив см. в указателе директив.
В конфигурации по умолчанию исходного дистрибутива предполагается, что сервер установлен в \Apache24. Это значение можно изменить во время компиляции, но важно, чтобы в конечном итоге ServerRoot в httpd.conf соответствовал фактическому корневому каталогу установки. В бинарных дистрибутивах может быть настроен как корневой каталог установки по умолчанию, так и общая структура исходной конфигурации.
Основные отличия Apache для Windows:
-
Поскольку Apache для Windows является многопоточным, он не использует отдельный процесс для каждого запроса, как это может делать Apache в Unix. Вместо этого обычно работают только два процесса Apache: родительский процесс и дочерний процесс, обрабатывающий запросы. В дочернем процессе каждый запрос обрабатывается отдельным потоком.
Директивы управления процессами также отличаются:
MaxConnectionsPerChild: Как и директива Unix, она задает количество соединений, которые обслужит один дочерний процесс перед завершением работы. Однако, в отличие от Unix, замещающий процесс не запускается немедленно. Используйте значениеMaxConnectionsPerChild 0по умолчанию, если только вам не предписано изменить это поведение для устранения утечки памяти в сторонних модулях или приложениях, работающих внутри процесса.Предупреждение: при запуске нового дочернего процесса файл конфигурации сервера считывается повторно. Если вы изменилиhttpd.conf, новый дочерний процесс может не запуститься или результаты работы могут оказаться неожиданными.ThreadsPerChild: Эта директива является новой. Она указывает серверу, сколько потоков использовать. Это максимальное количество соединений, которые сервер может обрабатывать одновременно, поэтому, если ваш сайт получает много запросов, задайте достаточно большое значение. Рекомендуемое значение по умолчанию —ThreadsPerChild 150, однако его необходимо скорректировать с учетом наибольшего ожидаемого числа одновременных соединений. В директивах, принимающих имена файлов в качестве аргументов, необходимо указывать имена файлов в формате Windows, а не Unix. Однако Apache может интерпретировать обратную косую черту как символ экранирования, поэтому в путях следует последовательно использовать прямые косые черты, а не обратные.
-
Хотя в Windows имена файлов обычно не чувствительны к регистру, URL-адреса обрабатываются внутри системы с учетом регистра до их сопоставления с файловой системой. Например, директивы
<Location>,AliasиProxyPassиспользуют аргументы с учетом регистра. Поэтому при попытке ограничить доступ к содержимому файловой системы особенно важно использовать директиву<Directory>, поскольку она применяется ко всему содержимому каталога независимо от способа доступа к нему. Если вы хотите гарантировать использование в URL-адресах только строчных букв, можно использовать что-то вроде следующего:RewriteEngine On RewriteMap lowercase int:tolower RewriteCond "%{REQUEST_URI}" "[A-Z]" RewriteRule "(.*)" "${lowercase:$1}" [R,L] Во время работы Apache требуется право записи только в каталог журналов и в настроенное дерево каталогов кеша. Из-за нечувствительности к регистру и поддержки коротких имен формата 8.3 Apache должен проверять все указанные пути. Это означает, что для каждого проверяемого Apache каталога — от корня диска до конечного каталога — необходимы права на чтение, просмотр списка файлов и переход по каталогу. Если Apache 2.4 установлен в C:\Program Files, Apache должен иметь доступ к корневому каталогу, Program Files и Apache24.
-
Apache для Windows умеет загружать модули во время выполнения без повторной компиляции сервера. При обычной компиляции Apache ряд дополнительных модулей устанавливается в каталог
\Apache2.4\modules. Чтобы активировать эти или другие модули, необходимо использовать директивуLoadModule. Например, чтобы активировать модуль состояния, используйте следующее (в дополнение к директивам активации состояния вaccess.conf):LoadModule status_module "modules/mod_status.so"
Также доступна информация о создании загружаемых модулей.
Apache также может загружать расширения ISAPI (Internet Server Application Programming Interface), например те, что используются Microsoft IIS и другими серверами Windows. Дополнительная информация. Обратите внимание, что Apache не может загружать фильтры ISAPI, а обработчики ISAPI с некоторыми расширениями функций Microsoft работать не будут.
При запуске CGI-сценариев способ, которым Apache находит интерпретатор для сценария, настраивается с помощью директивы
ScriptInterpreterSource.Поскольку в Windows часто сложно работать с файлами с именами вроде
.htaccess, может быть полезно изменить имя этого файла конфигурации для отдельного каталога с помощью директивыAccessFilename.Все ошибки при запуске Apache в Windows NT записываются в журнал событий Windows. Этот механизм служит резервным средством на случай, если Apache еще не может использовать файл
error.log. Просмотреть журнал событий приложений Windows можно с помощью средства «Просмотр событий»: Пуск — Параметры — Панель управления — Администрирование — Просмотр событий.
Запуск Apache как службы
В комплект Apache входит утилита Apache Service Monitor. С ее помощью можно просматривать состояние всех установленных служб Apache на любом компьютере в сети и управлять ими. Чтобы управлять службой Apache с помощью монитора, сначала необходимо установить службу (автоматически в ходе установки или вручную).
Установить Apache как службу Windows NT можно из командной строки в подкаталоге Apache bin следующим образом:
httpd.exe -k install
Если необходимо указать имя устанавливаемой службы, используйте следующую команду. Это нужно сделать, если на компьютере установлено несколько экземпляров Apache в качестве служб. Если при установке вы указали имя, его также необходимо указывать при выполнении любых других операций -k.
httpd.exe -k install -n "MyServiceName"
Если для разных служб нужны файлы конфигурации с определенными именами, используйте следующую команду:
httpd.exe -k install -n "MyServiceName" -f "c:\files\my.conf"
Если использовать первую команду без специальных параметров, кроме -k install, служба будет называться Apache2.4, а файлом конфигурации будет считаться conf\httpd.conf.
Удалить службу Apache просто. Используйте команду:
httpd.exe -k uninstall
Конкретную службу Apache, которую нужно удалить, можно указать с помощью команды:
httpd.exe -k uninstall -n "MyServiceName"
Обычно запуск, перезапуск и остановка службы Apache выполняются с помощью Apache Service Monitor, команд вроде NET START Apache2.4 и NET STOP Apache2.4 или стандартных средств управления службами Windows. Перед запуском Apache в качестве службы любым способом проверьте файл конфигурации службы с помощью команды:
httpd.exe -n "MyServiceName" -t
Управлять службой Apache также можно с помощью параметров командной строки. Чтобы запустить установленную службу Apache, используйте следующую команду:
httpd.exe -k start -n "MyServiceName"
Чтобы остановить службу Apache с помощью параметров командной строки, используйте следующую команду:
httpd.exe -k stop -n "MyServiceName"
или
httpd.exe -k shutdown -n "MyServiceName"
Также можно перезапустить работающую службу и заставить ее повторно считать файл конфигурации с помощью команды:
httpd.exe -k restart -n "MyServiceName"
По умолчанию все службы Apache регистрируются для запуска от имени системного пользователя (учетная запись LocalSystem). У учетной записи LocalSystem нет привилегий доступа к сети через механизмы безопасности Windows, включая файловую систему, именованные каналы, DCOM и защищенный RPC. Однако локально у нее широкие привилегии.
LocalSystem сетевые привилегии! Если Apache должен иметь доступ к сетевым ресурсам, создайте для Apache отдельную учетную запись, как описано ниже.Рекомендуется создать отдельную учетную запись для запуска служб Apache. Это обязательно, если Apache должен получать доступ к сетевым ресурсам.
- Создайте обычную учетную запись пользователя домена и не забудьте запомнить ее пароль.
- Предоставьте созданному пользователю привилегии
Log on as a serviceиAct as part of the operating system. В Windows NT 4.0 эти привилегии назначаются через «Диспетчер пользователей для доменов», а в Windows 2000 и XP для распространения этих параметров, вероятно, следует использовать групповую политику. Их также можно задать вручную с помощью оснастки консоли управления «Локальная политика безопасности». - Убедитесь, что созданная учетная запись входит в группу Users.
- Предоставьте учетной записи права на чтение и выполнение (RX) для всех каталогов документов и сценариев (например,
htdocsиcgi-bin). - Предоставьте учетной записи права на изменение (RWXD) для каталога Apache
logs. - Предоставьте учетной записи права на чтение и выполнение (RX) для исполняемого файла
httpd.exe.
logs, где у пользователя должны быть как минимум права на изменение (RWXD).Если разрешить учетной записи входить в систему как обычному пользователю и как службе, можно войти в систему с этой учетной записью и проверить, есть ли у нее права на выполнение сценариев и чтение веб-страниц, а также можно ли запустить Apache в окне консоли. Если это работает и вы выполнили описанные выше действия, Apache должен без проблем запускаться как служба.
При запуске Apache как службы может появиться сообщение об ошибке от диспетчера управления службами Windows. Например, при попытке запустить Apache с помощью апплета «Службы» на панели управления Windows может появиться следующее сообщение:
Could not start the Apache2.4 service on \\COMPUTER Error 1067; The process terminated unexpectedly.
Это общее сообщение об ошибке появляется при любой проблеме с запуском службы Apache. Чтобы выяснить истинную причину, следуйте инструкциям в разделе «Запуск Apache для Windows из командной строки».
Если возникли проблемы со службой, рекомендуется выполнить приведенные ниже инструкции: попробуйте запустить httpd.exe из окна консоли и устраните ошибки, прежде чем снова пытаться запустить его как службу.
Запуск Apache как консольного приложения
Обычно рекомендуется запускать Apache как службу, но иногда удобнее работать из командной строки, особенно на начальном этапе настройки и тестирования.
Чтобы запустить Apache из командной строки как консольное приложение, используйте следующую команду:
httpd.exeApache запустится и продолжит работу, пока его не остановят нажатием Control-C.
Также можно запустить Apache с помощью ярлыка «Start Apache in Console», созданного при установке в Start Menu --> Programs --> Apache HTTP Server 2.4.xx --> Control Apache Server. Откроется окно консоли и в нем запустится Apache. Если Apache не установлен как служба, окно останется открытым, пока вы не остановите Apache нажатием Control-C в том окне консоли, где он запущен. Через несколько секунд сервер завершит работу. Если же Apache установлен как служба, ярлык запускает службу. Если служба Apache уже работает, ярлык ничего не делает.
Если Apache работает как служба, остановить его можно, открыв другое окно консоли и введя следующую команду:
httpd.exe -k shutdown
Предпочтительнее запускать Apache как службу, а не в окне консоли: в этом случае Apache сможет завершить текущие операции и корректно освободить ресурсы.
Однако если сервер запущен в окне консоли, остановить его можно только нажатием Control-C в том же окне.
Также можно перезапустить Apache. При этом файл конфигурации будет считан повторно. Все текущие операции смогут завершиться без прерывания. Чтобы перезапустить Apache, нажмите Control-Break в окне консоли, из которого был запущен Apache, или введите команду
httpd.exe -k restart
если сервер работает как служба.
kill -TERM pid и kill -USR1 pid в Windows. Параметр командной строки -k выбран как напоминание о команде kill, используемой в Unix.Если окно консоли Apache закрывается сразу после запуска или неожиданно, откройте командную строку через меню «Пуск» —> «Программы». Перейдите в папку, куда установлен Apache, введите команду httpd.exe и прочитайте сообщение об ошибке. Затем перейдите в папку журналов и проверьте файл error.log на наличие ошибок конфигурации. Если httpd установлен в C:\Program Files\Apache Software Foundation\Apache2.4\, выполните следующие команды:
c: cd "\Program Files\Apache Software Foundation\Apache2.4\bin" httpd.exe
Затем дождитесь остановки Apache или нажмите Control-C. После этого введите следующую команду:
cd ..\logs more < error.log
При работе с Apache важно знать, как он находит файл конфигурации. Указать файл конфигурации в командной строке можно двумя способами:
-
-fзадает абсолютный или относительный путь к определенному файлу конфигурации:httpd.exe -f "c:\my server files\anotherconfig.conf"
или
httpd.exe -f files\anotherconfig.conf
-
-nзадает установленную службу Apache, файл конфигурации которой следует использовать:httpd.exe -n "MyServiceName"
В обоих случаях в файле конфигурации должно быть задано правильное значение ServerRoot.
Если не указать файл конфигурации с помощью -f или -n, Apache будет использовать имя файла, заданное при компиляции сервера, например conf\httpd.conf. Этот встроенный путь является относительным к каталогу установки. Имя файла, заданное при компиляции, можно проверить по значению с меткой SERVER_CONFIG_FILE, вызвав Apache с параметром -V, например так:
httpd.exe -V
После этого Apache попытается определить свой ServerRoot, проверяя следующие варианты в указанном порядке:
- Директива
ServerRoot, заданная параметром командной строки-C. - Параметр
-dв командной строке. - Текущий рабочий каталог.
- Запись в реестре, созданная при бинарной установке.
- Корневой каталог сервера, заданный при компиляции. По умолчанию это
/apache; проверить его можно с помощьюhttpd.exe -V, найдя значение с меткойHTTPD_ROOT.
Если бинарная установка не выполнялась, в некоторых случаях Apache сообщит об отсутствии ключа реестра. Это предупреждение можно игнорировать, если сервер смог найти файл конфигурации другим способом.
Значение этого ключа — каталог ServerRoot, содержащий подкаталог conf. При запуске Apache считывает из этого каталога файл httpd.conf. Если в этом файле содержится директива ServerRoot, задающая каталог, отличный от полученного из описанного выше ключа реестра, Apache проигнорирует ключ реестра и будет использовать каталог из файла конфигурации. Если вы копируете каталог Apache или файлы конфигурации в новое место, необходимо обновить директиву ServerRoot в файле httpd.conf, указав новое расположение.
Проверка установки
После запуска Apache (в окне консоли или как службы) он будет прослушивать порт 80 (если вы не изменили директиву Listen в файлах конфигурации и не установили Apache только для текущего пользователя). Чтобы подключиться к серверу и открыть страницу по умолчанию, запустите браузер и введите следующий URL-адрес:
http://localhost/Apache должен показать приветственную страницу с текстом «Работает!». Если ничего не происходит или появляется ошибка, проверьте файл error.log в подкаталоге logs. Если компьютер не подключен к сети или возникли серьезные проблемы с настройкой DNS (Domain Name Service), возможно, придется использовать следующий URL-адрес:
http://127.0.0.1/Если Apache работает на альтернативном порту, необходимо явно указать его в URL-адресе:
http://127.0.0.1:8080/После успешной базовой установки следует правильно настроить Apache, отредактировав файлы в подкаталоге conf. И еще раз: если вы меняете конфигурацию службы Apache в Windows NT, сначала попробуйте запустить ее из командной строки, чтобы убедиться в отсутствии ошибок.
Поскольку Apache не может использовать один и тот же порт совместно с другим приложением TCP/IP, перед запуском Apache может понадобиться остановить, удалить или перенастроить некоторые другие службы. К ним относятся другие WWW-серверы, некоторые реализации брандмауэров и даже клиентские приложения (например, Skype), которые используют порт 80, пытаясь обойти проблемы с брандмауэром.
Настройка доступа к сетевым ресурсам
Для доступа к файлам по сети в Windows предусмотрены два механизма:
- Подключенные буквы дисков
- например,
Alias "/images/" "Z:/" - UNC-пути
- например,
Alias "/images/" "//imagehost/www/images/"
Подключенные буквы дисков позволяют администратору задать сопоставление с конкретным компьютером и путем вне конфигурации Apache httpd. Однако эти сопоставления связаны только с интерактивными сеансами и недоступны непосредственно для Apache httpd при запуске в качестве службы. В httpd.conf используйте для сетевых ресурсов только UNC-пути, чтобы ресурсы были доступны независимо от способа запуска Apache httpd. (Обойти ограничение на использование подключенных букв дисков можно с помощью сложных и подверженных ошибкам процедур, но это не рекомендуется.)
Пример DocumentRoot с UNC-путем
UNCList dochost DocumentRoot "//dochost/www/html/"
Пример DocumentRoot с IP-адресом в UNC-пути
UNCList 192.168.1.50 DocumentRoot "//192.168.1.50/docs/"
Пример Alias и соответствующей директивы Directory с UNC-путем
UNCList imagehost1 imagehost2 Alias "/images/" "//imagehost/www/images/" Alias "/images2/" "//imagehost2/www/images/" <Directory "//imagehost/www/images/"> #... </Directory> <Directory "//imagehost2/www/images/"> #... </Directory>
Для доступа к сетевым ресурсам при запуске Apache httpd как службы необходимо создать отдельную учетную запись, как описано выше.
Оптимизация Windows
Если в одном экземпляре операционной системы используется более нескольких десятков регистраторов с каналами, часто требуется увеличить размер «кучи рабочего стола». Дополнительные сведения см. в документации по журналированию через каналы.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/platform/windows.html