Пункт 57. Использование Apache с Microsoft Windows
В этом документе объясняется, как установить, настроить и запустить Apache 2.4 под Microsoft Windows. Если после просмотра документации (и любых журналов событий и ошибок) у вас возникнут вопросы, вам следует обратиться к списку рассылки пользователей, поддерживающих партнерскую поддержку.
В этом документе предполагается, что вы устанавливаете бинарный дистрибутив Apache. Если вы хотите скомпилировать Apache самостоятельно (возможно, чтобы помочь в разработке или отследить ошибки), см. Компиляция Apache для Microsoft Windows.
Требования к операционной системе
Основной платформой Windows для запуска Apache 2.4 является Windows 2000 или более поздняя версия. Всегда получайте и устанавливайте текущий пакет обновления, чтобы избежать ошибок операционной системы.
Версии HTTP-сервера Apache более поздние, чем 2.2, не будут работать ни в одной операционной системе, предшествующей Windows 2000.
Загрузка Apache для Windows
Сам проект HTTP-сервера Apache не предоставляет бинарные версии программного обеспечения, а только исходный код. Отдельные коммиттеры могут предоставлять бинарные пакеты для удобства, но это не окончательный результат.
Если вы не можете скомпилировать HTTP-сервер Apache самостоятельно, вы можете получить бинарный пакет из многочисленных бинарных дистрибутивов, доступных в Интернете.
Популярные варианты развертывания Apache httpd и, при необходимости, PHP и MySQL в Microsoft Windows включают:
- ApacheHaus
- Лаундж Апачи
- Стек BitNami WAMP
- WampServer
- XAMPP
Настройка Apache для Windows
Apache настраивается файлами в conf
подкаталоге. Это те же самые файлы, которые используются для настройки версии Unix, но есть несколько других директив для Apache в Windows. См. индекс директив для всех доступных директив.
Основные отличия Apache для Windows:
Поскольку Apache для Windows является многопоточным, он не использует отдельный процесс для каждого запроса, как это может делать Apache в Unix. Вместо этого обычно работают только два процесса Apache: родительский процесс и дочерний процесс, который обрабатывает запросы. В дочернем процессе каждый запрос обрабатывается отдельным потоком.
Директивы управления процессами также отличаются:
MaxConnectionsPerChild
: Как и директива Unix, это определяет, сколько соединений будет обслуживать один дочерний процесс перед выходом. Однако, в отличие от Unix, процесс замены не доступен мгновенно. Используйте значение по умолчанию MaxConnectionsPerChild 0
, если не указано изменить поведение для устранения утечки памяти в сторонних модулях или внутрипроцессных приложениях.
Предупреждение. Файл конфигурации сервера перечитывается при запуске нового дочернего процесса. Если вы изменили apache2.conf
, новый дочерний элемент может не запуститься или вы можете получить неожиданные результаты.
ThreadsPerChild
: Эта директива является новой. Он сообщает серверу, сколько потоков он должен использовать. Это максимальное количество соединений, которое сервер может обрабатывать одновременно, поэтому убедитесь, что это число достаточно велико для вашего сайта, если вы получаете много посещений. Рекомендуемое значение по умолчанию —
ThreadsPerChild 150
, но его необходимо настроить, чтобы отразить максимальное предполагаемое количество одновременных подключений.
Директивы, которые принимают имена файлов в качестве аргументов, должны использовать имена файлов Windows, а не Unix. Однако, поскольку Apache может интерпретировать обратную косую черту как последовательность «экранирующих символов», вы должны последовательно использовать прямую косую черту в именах путей, а не обратную косую черту.
В то время как имена файлов обычно нечувствительны к регистру в Windows, URL-адреса по-прежнему обрабатываются внутренне как чувствительные к регистру, прежде чем они будут сопоставлены с файловой системой. Например, все
<Location>
директивы
Alias
, и ProxyPass
используют аргументы с учетом регистра. По этой причине особенно важно использовать эту <Directory>
директиву при попытке ограничить доступ к содержимому в файловой системе, поскольку эта директива применяется к любому содержимому в каталоге, независимо от того, как к нему осуществляется доступ. Если вы хотите убедиться, что в URL-адресах используются только строчные буквы, вы можете использовать что-то вроде:
RewriteEngine включен
RewriteMap нижний регистр int:tolower
RewriteCond "%{REQUEST_URI}" "[AZ]"
RewriteRule "(.*)" "${нижний регистр:$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/mod_status.so
Также доступна информация о создании загружаемых модулей.
Apache также может загружать расширения ISAPI (Internet Server Application Programming Interface), например, используемые Microsoft IIS и другими серверами Windows. Доступна дополнительная информация. Обратите внимание, что Apache не может
загружать фильтры ISAPI, а обработчики ISAPI с некоторыми расширениями функций Microsoft не будут работать.
При запуске сценариев CGI метод, используемый Apache для поиска интерпретатора сценария, настраивается с помощью директивы
ScriptInterpreterSource
.
Поскольку часто бывает сложно управлять файлами с именами, как .htaccess
в Windows, может оказаться полезным изменить имя этого файла конфигурации для каждого каталога с помощью директивы AccessFilename
.
Любые ошибки во время запуска Apache регистрируются в журнале событий Windows при работе в Windows NT. Этот механизм действует как резервная копия для тех ситуаций, когда Apache еще не готов использовать файл error.log
. Вы можете просмотреть журнал событий приложений Windows с помощью средства просмотра событий, например, «Пуск» — «Настройка» — «Панель управления» — «Администрирование» — «Просмотр событий».
Запуск Apache как службы
Apache поставляется с утилитой под названием Apache Service Monitor. С его помощью вы можете видеть и управлять состоянием всех установленных служб Apache на любом компьютере в вашей сети. Чтобы иметь возможность управлять службой Apache с помощью монитора, вы должны сначала установить службу (либо автоматически посредством установки, либо вручную).
Вы можете установить Apache как службу Windows NT следующим образом из командной строки в bin
подкаталоге Apache:
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\apache2.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)
logs
каталогу Apache.
- Предоставьте учетной записи права на чтение и выполнение (RX) для
httpd.exe
двоичного исполняемого файла.
Обычно хорошей практикой является предоставление пользователю службы Apache, работающей как чтение и выполнение (RX), доступа ко всему каталогу Apache2.4, за исключением подкаталога, для которого
logs
пользователь должен иметь как минимум права на изменение (RWXD).
Если вы разрешите учетной записи входить в систему как пользователь и как служба, вы можете войти в систему с этой учетной записью и проверить, что учетная запись имеет привилегии для выполнения сценариев, чтения веб-страниц и что вы можете запускать Apache в консольное окно. Если это работает, и вы выполнили шаги, описанные выше, Apache должен работать как служба без проблем.
Код ошибки 2186 является хорошим признаком того, что вам необходимо просмотреть конфигурацию «Вход в систему как» для службы, поскольку 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.exe
Apache выполнится и будет работать до тех пор, пока не будет остановлен нажатием Control-C.
Вы также можете запустить Apache с помощью ярлыка «Запустить Apache» в консоли, расположенного Start Menu --> Programs --> Apache HTTP Server
2.4.xx --> Control Apache Server
во время установки. Это откроет окно консоли и запустит Apache внутри него. Если у вас не установлен Apache в качестве службы, окно будет оставаться видимым до тех пор, пока вы не остановите Apache, нажав Control-C в окне консоли, где работает Apache. Сервер завершит работу через несколько секунд. Однако, если у вас установлен Apache как служба, ярлык запускает службу. Если служба Apache уже запущена, ярлык ничего не делает.
Если Apache работает как служба, вы можете остановить его, открыв другое окно консоли и введя:
httpd.exe -k shutdown
Запуск в качестве службы предпочтительнее запуска в окне консоли, поскольку это позволяет Apache завершать любые текущие операции и корректно очищать их.
Но если сервер запущен в окне консоли, остановить его можно только нажав Control-C в том же окне.
Вы также можете указать Apache перезапуститься. Это заставляет его перечитать файл конфигурации. Любые выполняемые операции могут выполняться без перерыва. Чтобы перезапустить Apache, либо нажмите Control-Break в окне консоли, которое вы использовали для запуска Apache, либо введите
httpd.exe -k restart
если сервер работает как служба.
Примечание для людей, знакомых с Unix-версией Apache: эти команды предоставляют Windows-эквивалент и . Используемый параметр командной строки был выбран как напоминание о команде, используемой в Unix.
kill -TERM
pid
kill -USR1 pid
-k
kill
Если окно консоли 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\apache2.conf
. Этот встроенный путь относится к каталогу установки. Вы можете проверить имя скомпилированного файла по значению, помеченному как SERVER_CONFIG_FILE
при вызове Apache с помощью -V
переключателя, например:
httpd.exe -V
Затем Apache попытается определить его ServerRoot
, выполнив следующие действия в указанном порядке:
- Директива
ServerRoot
через -C
переключатель командной строки.
- Переключатель
-d
в командной строке.
- Текущий рабочий каталог.
- Запись реестра, созданная, если вы выполнили бинарную установку.
- Корень сервера скомпилирован в файл server. Это
/apache
по умолчанию, вы можете проверить это, используя
httpd.exe -V
и найдя значение, помеченное как
HTTPD_ROOT
.
Если вы не выполнили бинарную установку, Apache в некоторых случаях будет жаловаться на отсутствующий раздел реестра. Это предупреждение можно проигнорировать, если в противном случае сервер смог найти свой файл конфигурации.
Значением этого ключа является
ServerRoot
каталог, содержащий conf
подкаталог. Когда Apache запускается, он читает apache2.conf
файл из этого каталога. Если этот файл содержит ServerRoot
директиву, которая содержит другой каталог, отличный от того, который был получен из ключа реестра выше, Apache забудет ключ реестра и будет использовать каталог из файла конфигурации. Если вы копируете каталог Apache или файлы конфигурации в новое место, очень важно обновить директиву
ServerRoot
в
apache2.conf
файле, чтобы отразить новое местоположение.
Проверка установки
После запуска Apache (либо в окне консоли, либо в качестве службы) он будет прослушивать порт 80 (если вы не изменили директиву
Listen
в файлах конфигурации или не установили Apache только для текущего пользователя). Чтобы подключиться к серверу и получить доступ к странице по умолчанию, запустите браузер и введите этот URL-адрес:
http://localhost/
Apache должен ответить страницей приветствия, и вы должны увидеть «Это работает!». Если ничего не происходит или вы получаете сообщение об ошибке, посмотрите файл
error.log
в logs
подкаталоге. Если ваш хост не подключен к сети или у вас есть серьезные проблемы с конфигурацией DNS (службы доменных имен), вам может потребоваться использовать этот URL-адрес:
http://127.0.0.1/
Если вы используете Apache на альтернативном порту, вам необходимо явно указать это в URL-адресе:
http://127.0.0.1:8080/
Как только ваша базовая установка заработает, вы должны правильно настроить ее, отредактировав файлы в conf
подкаталоге. Опять же, если вы изменяете конфигурацию службы Windows NT для Apache, сначала попытайтесь запустить ее из командной строки, чтобы убедиться, что служба запускается без ошибок.
Поскольку Apache не может использовать один и тот же порт с другим приложением TCP/IP, вам может потребоваться остановить, удалить или перенастроить некоторые другие службы перед запуском Apache. Эти конфликтующие службы включают в себя другие WWW-серверы, некоторые реализации брандмауэра и даже некоторые клиентские приложения (например, Skype), которые будут использовать порт 80, чтобы попытаться обойти проблемы с брандмауэром.
Настройка доступа к сетевым ресурсам
Доступ к файлам по сети можно указать с помощью двух механизмов, предоставляемых Windows:
- Подключенные буквы дисков
- например,
Alias "/images/" "Z:/"
- UNC-пути
- например,
Alias "/images/" "//imagehost/www/images/"
Сопоставленные буквы дисков позволяют администратору поддерживать сопоставление с определенной машиной и путем вне конфигурации Apache httpd. Однако эти сопоставления связаны только с интерактивными сеансами и недоступны напрямую для Apache httpd, когда он запускается как служба. Используйте только UNC-пути для сетевых ресурсов в apache2.conf , чтобы обеспечить согласованный доступ к ресурсам независимо от того, как запущен Apache httpd. (Тайные и подверженные ошибкам процедуры могут обойти ограничение на отображаемые буквы дисков, но это не рекомендуется.)
Пример DocumentRoot с путем UNC
DocumentRoot "//dochost/www/html/"
Пример DocumentRoot с IP-адресом в пути UNC
DocumentRoot "//192.168.1.50/документы/"
Пример псевдонима и соответствующего каталога с путем UNC
Псевдоним "/images/" "//imagehost/www/images/"
<Каталог "//imagehost/www/images/">
#...
<Каталог>
При запуске Apache httpd как службы необходимо создать отдельную учетную запись для доступа к сетевым ресурсам, как описано выше.
Настройка Windows