Использование 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-версии, но для Windows существуют несколько других директив Apache. См. справочник по директивам для всех доступных директив.
Основные различия в 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, от корня диска до листового каталога, должен иметь разрешения на чтение, перечисление и просмотр каталога. Если Apache2.4 установлен в C:\Program Files, то корневой каталог, Program Files и Apache2.4 должны быть видны Apache.
-
Apache для Windows позволяет загружать модули во время выполнения, без перекомпиляции сервера. Если Apache скомпилирован в обычном режиме, он установит ряд дополнительных модулей в каталог
\Apache2.4\modules. Для активации этих или других модулей необходимо использовать директивуLoadModule. Например, для активации модуля состояния используйте следующее (в дополнение к директивам активации состояния вaccess.conf) :LoadModule status_module "modules/mod_status.so"
Информация по созданию загружаемых модулей также доступна.
Apache также может загружать расширения ISAPI (Интерфейс программирования приложений сервера Интернета), такие как те, которые используются Microsoft IIS и другими серверами Windows. Дополнительная информация доступна. Обратите внимание, что Apache не может загружать фильтры ISAPI, и ISAPI-обработчики с некоторыми расширениями функций Microsoft не будут работать.
При выполнении CGI-скриптов метод, используемый Apache для поиска интерпретатора для скрипта, настраивается с помощью директивы
ScriptInterpreterSource.Поскольку часто трудно управлять файлами с именами, такими как
.htaccessв Windows, вам может быть полезно изменить имя этого файла конфигурации по каталогам с помощью директивыAccessFilename.Любые ошибки во время запуска Apache регистрируются в журнале событий Windows при работе в Windows NT. Этот механизм служит резервной копией для тех случаев, когда Apache еще не готов использовать файл
error.log. Вы можете просмотреть журнал событий Windows приложений, используя средство просмотра событий, например, Пуск - Настройки - Панель управления - Инструменты администрирования - Просмотр событий.
Запуск Apache как службы
Apache поставляется со служебной утилитой «Монитор службы Apache». С ее помощью вы можете просматривать и управлять состоянием всех установленных служб 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, используя команды типа 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 вы, вероятно, захотите использовать групповые политики для распространения этих настроек. Вы также можете вручную установить их через оснастку MMC «Политика локальной безопасности». - Убедитесь, что созданная учетная запись является членом группы Пользователи.
- Предоставьте учетной записи права чтения и выполнения (RX) для всех каталогов документов и скриптов (например,
htdocsиcgi-bin). - Предоставьте учетной записи права изменения (RWXD) для каталога Apache
logs. - Предоставьте учетной записи права чтения и выполнения (RX) для исполняемого файла
httpd.exe.
logs, где пользователю должны быть предоставлены права изменения (RWXD).Если вы разрешите учетной записи входить как пользователю, так и в качестве службы, то вы можете войти под этой учетной записью и проверить, что учетная запись имеет права выполнять скрипты, читать веб-страницы и что вы можете запустить Apache в окне консоли. Если это работает, и вы выполнили шаги, указанные выше, Apache должен запускаться в качестве службы без проблем.
END_OF_DOCUMENT_MARKERПри запуске 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 будет выполняться и останется запущенным до тех пор, пока его не остановят, нажав Ctrl-C.
Вы также можете запустить Apache с помощью ярлыка «Запустить Apache в консоли», размещённого в Start Menu --> Programs --> Apache HTTP Server 2.4.xx --> Control Apache Server во время установки. Это откроет консольное окно и запустит Apache в нём. Если Apache не установлен как служба, окно останется видимым, пока вы не остановите Apache, нажав Ctrl-C в консольном окне, где Apache выполняется. Сервер завершится через несколько секунд. Однако, если Apache установлен как служба, ярлык запускает службу. Если служба Apache уже запущена, ярлык ничего не делает.
Если Apache выполняется в качестве службы, вы можете остановить его, открыв другое консольное окно и введя:
httpd.exe -k shutdown
Запуск в качестве службы предпочтительнее запуска в консольном окне, потому что это позволяет Apache завершить все текущие операции и корректно завершиться.
Но если сервер работает в консольном окне, вы можете остановить его только, нажав Ctrl-C в том же окне.
Вы также можете сказать Apache перезапуститься. Это заставляет его повторно прочитать конфигурационный файл. Любые операции в процессе будут разрешены к завершению без прерывания. Чтобы перезапустить Apache, нажмите Ctrl-Break в консольном окне, которое вы использовали для запуска Apache, или введите
httpd.exe -k restart
если сервер работает как служба.
kill -TERM pid и kill -USR1 pid. Использованный параметр командной строки -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 не остановится, или нажмите Ctrl-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 должен ответить приветственной страницей, и вы должны увидеть «It Works!». Если ничего не происходит или вы получаете ошибку, посмотрите в файл error.log в подкаталоге logs. Если ваш хост не подключён к сети или у вас серьёзные проблемы с конфигурацией DNS (Domain Name Service), вам может потребоваться использовать этот URL:
http://127.0.0.1/Если вы случайно запускаете Apache на альтернативном порту, вам нужно явно указать его в URL:
http://127.0.0.1:8080/После того, как ваша основная установка будет работать, вам следует правильно настроить её, отредактировав файлы в подкаталоге conf. Опять же, если вы измените конфигурацию службы Windows NT для Apache, сначала попробуйте запустить его из командной строки, чтобы убедиться, что служба запускается без ошибок.
Поскольку Apache не может использовать один и тот же порт с другим приложением TCP/IP, вам может потребоваться остановить, удалить или перенастроить некоторые другие службы перед запуском Apache. К этим конфликтующим службам относятся другие веб-серверы, некоторые реализации брандмауэров и даже некоторые клиентские приложения (например, Skype), которые будут использовать порт 80, чтобы попытаться обойти проблемы с брандмауэром.
Настройка доступа к сетевым ресурсам
Доступ к файлам через сеть можно указать, используя два механизма, предоставляемых Windows:
- Сопоставленные буквы дисков
- например,
Alias "/images/" "Z:/" - Пути UNC
- например,
Alias "/images/" "//imagehost/www/images/"
Сопоставленные буквы дисков позволяют администратору поддерживать отображение на конкретный компьютер и путь за пределами конфигурации Apache httpd. Однако эти отображения связаны только с интерактивными сеансами и не доступны напрямую для Apache httpd при запуске в качестве службы. Используйте только пути UNC для сетевых ресурсов в httpd.conf, чтобы ресурсы можно было получить доступ к ним последовательно независимо от того, как запускается Apache httpd. (Эксцентричные и подверженные ошибкам процедуры могут обойти ограничение на сопоставленные буквы дисков, но это не рекомендуется.)
Пример DocumentRoot с UNC-путем
DocumentRoot "//dochost/www/html/"
Пример DocumentRoot с IP-адресом в UNC-пути
DocumentRoot "//192.168.1.50/docs/"
Пример Alias и соответствующего Directory с UNC-путем
Alias "/images/" "//imagehost/www/images/" <Directory "//imagehost/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