Как запустить Apache на Windows

Веб-сервер Apache – это служба, которая работает в фоне и у которой нет графического интерфейса. Эта служба устанавливается и запускается в командной строке.

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

Настройка Apache на Windows

На самом деле, базовая настройка веб-сервера крайне проста – необходимо только правильно указать путь до папки, в которой помещены веб-сайты – этого будет достаточно для запуска веб-сервера.

Кстати, в конфигурационном файле уже прописаны значения многих параметров по умолчанию. К примеру, по умолчанию корневой директорией является c:/Apache24. Поэтому если папку Apache24 из скаченного архива вы разархивируете в корень диска C, то вы можете вообще без настройки запустить веб-сервер следующей командой:

c:\Apache24\bin\httpd.exe -k start

И по адресу http://localhost увидите стандартную страницу веб-сервера, которая сообщает, что он работает:

Кстати, для открытия командной строки в Windows используйте сочетание клавиш Win+x и в открывшемся окне выберите Windows PowerShell (администратор).

Настройка веб-сервера выполняется посредством редактирования текстового файла, который размещён в папке Apache24\conf\ и называется httpd.conf.

Этот файл состоит из директив с определёнными значениями. Эти директивы регулируют поведение веб-сервера. Но больше чем директив в этом файле комментариев – они начинаются с решётки (#) – комментарии нужны для человека, который настраивает веб-сервер. Сам сервер строки начинающиеся с # просто игнорирует. Т.е. вы можете просто удалить их.

Этот файл содержит не все возможные директивы – многие из них здесь отсутствуют, поскольку не требуются для большинства задач. Даже в этой заметки мы рассмотрим не все доступные в файле настройки – если описание чего-то пропущено, значит просто не нужно это трогать.

Как уже было сказано, важно установить путь до папки с веб-сайтами. Если она установлена неправильно (например, отсутствует на компьютере), то веб-сервер не запуститься.

Думаю, вы уже обратили внимание, что веб-сервер отличается от других программ для Windows. Если вы знакомы с Linux или другими аналогичными операционными системами, вам должна быть знакома работа в консоли и редактирование текстовых файлов. Пути до файлов тоже записываются не совсем обычно для Windows. Сейчас главное уяснить два правила:

  • используйте абсолютные пути до файла (которые начинаются с буквы диска, затем следуют все вложенные папки), а не относительные – у сервера свои правила интерпретации относительных путей, поэтому вы можете не понять друг друга;
  • всегда используйте прямые слеши, а не обратные (т.е., "c:/apache" вместо "c:\apache").

Итак, откройте файл Apache24\conf\httpd.conf любым текстовым редактором (хоть Блокнотом) и вот мы уже готовы к настройке веб-сервера.

Первой идёт директива ServerRoot – это верхняя директория дерева, в которой хранятся файлы конфигурации сервера и журналов. Не добавляйте слэш на конец пути папки.

Значение по умолчанию устанавливается двумя директивами:

Define SRVROOT "c:/Apache24"
ServerRoot "${SRVROOT}"

Первая директива присваивает значение переменной SRVROOT, которое по умолчанию "c:/Apache24". Вторая директива присваивает значение переменной ${SRVROOT} настройке ServerRoot.

ServerRoot — это та папка, в которой находятся все файлы веб-сервера – поменяйте значение на то, куда вы распаковали файлы веб-сервера. Это можно сделать используя конструкцию из двух переменных:

Define SRVROOT "c:/Server/bin/Apache24"
ServerRoot "${SRVROOT}"

Либо если вы не планируете снова использовать переменную ${SRVROOT} (а она по умолчанию используется далее!), то можно сократить запись из двух строк до одной строки:

ServerRoot "c:/Server/bin/Apache24"

Директива Listen позволяет вам привязать Apache к определённому IP адресу и/или порту. Значение по умолчанию:

Listen 80

Оно означает, прослушивать 80 порт на любом IP адресе (т.е. любом сетевом интерфейсе), доступном в вашей системе. Вы можете указать конкретный IP адрес, который нужно прослушивать и, следовательно, на запросы с которого отвечать:

Listen 12.34.56.78:80

Можно указать несколько портов:

Listen 80
Listen 8000

Или несколько IP и портов:

Listen 192.170.2.1:80
Listen 192.170.2.5:8000

Вы можете использовать любые сочетания, главное правило – порт на указанном интерфейсе (IP) не должен быть занят другой программой.

Значение по умолчанию вполне подходит для локального веб-сервера – т.е. здесь можно просто ничего не менять.

Далее идёт большой список модулей. Некоторые их них отключены (строки закомментированы, т.е. начинаются с #), а некоторые включены.

На самом деле, всё действительно необходимое уже включено – и для работы большинства веб-сайтов менять ничего не нужно – особенно на локальном веб-сервере. Но есть одно исключение – модуль mod_rewrite по умолчанию отключён. Это очень популярный модуль, например, все ЧПУ (понятные для человека адреса страниц) делаются с помощью него. Вы можете его включить, для этого достаточно найти строку:

#LoadModule rewrite_module modules/mod_rewrite.so

и раскомментировать её, т.е. заменить на:

LoadModule rewrite_module modules/mod_rewrite.so

Директива ServerAdmin содержит e-mail администратора, этот адрес электронной почты пишется на некоторых страницах веб-сервера, которые автоматически генерируются в случае возникновения ошибок. Подразумеваются, что по этому адресу можно связаться с администратором.

Директива ServerName – это то, как сервер сам себя идентифицирует (называет). Для локального веб-сервера поменяйте строку

#ServerName www.example.com:80

на

ServerName localhost

Конструкция

<Directory />
    AllowOverride none
    Require all denied
</Directory>

запрещает доступ к файловой системе веб-сервера (пока это не разрешено явно) и запрещает использовать файлы .htaccess (пока это не разрешено явно).

Далее идёт довольно объёмная конструкция, но если удалить из неё комментарии, то получается следующее:

DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

DocumentRoot – это директория, где по умолчанию находятся сайты. По умолчанию именно там ищутся все пришедшие на веб-сервер запросы. Укажите здесь путь до корневой папки в веб-документами. Конечный слэш писать не нужно.

Конструкция <Directory />…</Directory> нам уже встречалась. Но здесь указывается конкретная папка, для который делаются настройки. Эти настройки перезаписывают общие, которые указаны ранее.

Пути до папок в DocumentRoot и Directory не забудьте поменять на свои!

Обратите внимание, что для установки настроек вновь используется переменная ${SRVROOT}, значение которой было присвоено в самом начале. Если использовать синтаксис с ${SRVROOT}, то корневая папка документов должна обязательно находится в корневой папке сервера. Я настраиваю сервер по-другому — у меня исполнимые файлы отделены от файлов сайтов, поэтому вместо переменной, можно просто прописать пути до нужной папки с сайтами:

DocumentRoot "c:/Server/data/htdocs"
<Directory "c:/Server/data/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Директива Options включает разные опции. По умолчанию указаны опции Indexes и FollowSymLinks. Первая (Indexes) означает показывать индексные файлы, если запрос не содержит имени файла. Допустим, пользователь открывает адрес http://localhost/site/, то если в этой папке есть индексный файл (например, index.html или index.php), то будет показан этот файл. Понятно, что если сделан запрос на определённый файл, например, http://localhost/site/page.html, то будет показана запрошенная страница.

Вторая опция (FollowSymLinks) означает следовать символьным ссылкам. Это что-то вроде ярлыков в Windows. В Linux с помощью таких ссылок можно собрать в одном сайте файлы, размещённые в различных папках файловой системы. На самом деле, для начинающих администраторов сервера это не очень нужно.

Директива AllowOverride установлена на None, это означает запрет использовать файлы .htaccess. На своём сервере я разрешаю файлы .htaccess (нужны для mod_rewrite, ограничения доступа), поэтому я заменяю её значение на All, получается так:

AllowOverride All

А директива Require all granted открывает посетителям доступ для веб-документов.

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

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

Там всего один файл - index.html. Можно дописать любое количество своих собственных. Я меняю:

DirectoryIndex index.html

на

DirectoryIndex index.php index.html index.htm

Другие настройки обычно не требуется менять для локального веб-сервера.

Смотрите также:


Comments

  1. Ошибочка.

    "DocumentRoot – это директория, где по умолчанию находятся сайты. По умолчанию именно там ищутся все пришедшие на веб-сервер запросы. Укажите здесь путь до корневой папки в веб-документами. Конечный слэш писать не нужно"

    DocumentRoot "c:/Server/data/htdocs/"
    <Directory "c:/Server/data/htdocs/">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    </Directory>

    Эта же ошибка встречается во многих статьях на этом сайте. Или это ошибка в описании параметра?

    1. Приветствую, может быть «не нужно» используется в значении «необязательно». Я проверил, с последней версией работает и так и так. Зачем я упомянул этот слэш, я уже не помню — может быть, раньше с ним не работало. Сейчас подправлю инструкции, чтобы не было противоречия.

  2. Здравствуйте!

    Сделала всё по вашей инструкции, но в браузере страница не запускается. 

    В ошибках:

    Starting the 'Apache2.4' service
    [Sat Apr 30 01:33:38.946787 2022] [mpm_winnt:crit] [pid 9040:tid 372] (OS 2)Не удается найти указанный файл.  : AH00378: Failed to start the 'Apache2.4' service

    Подскажите пожалуйста как решить вопрос с установкой

    1. Приветствую! Суть ошибки в том, что не найден путь, который указан в конфигурационном файле с одной из директив.

      В этой инструкции упоминаются следующие директивы с путями:

      Define SRVROOT "c:/Apache24"
      ServerRoot "${SRVROOT}"
      
      DocumentRoot "${SRVROOT}/htdocs"
      <Directory "${SRVROOT}/htdocs">

      Выше приведены из значения по умолчанию, но в заметке я меняю их значения под свои условия.

      То есть вам нужно указать в них ваши пути куда вы распаковали Apache. Я устанавливаю веб-сервер в папку c:/Server/bin/Apache24 следовательно у меня и пути соответствующие.

      Для простоты вы можете распаковать Apache в корень диска C: и тогда вам даже не придётся что-либо менять.

      Скорее всего вы устанавливаете не только веб-сервер, но и СУБД, PHP и phpMyAdmin. О том, как это всё установить, какие папки создать, куда распаковать и какие настройки изменить подробно описано в инструкции «Как установить веб-сервер (Apache, MySQL, PHP и phpMyAdmin) в Windows 11».

  3. здравстуйте. Я запустил вебсервер на локальном компьютере. Как сделать видимым сайт на моем компьтере из интренета по внешнему моему ip

     

    1. Если вы спрашиваете (значит вы не арендуете отдельный IP адрес), то, скорее всего, ваш IP не белый. Чтобы убедиться что не белый, проверьте ваш текущий IP. А затем на устройстве не подключённом к вашей домашней сети (например, на мобильном телефоне), наберите этот IP в адресной строке веб-браузера. Если IP белый, то вы увидите веб страницу вашего роутера (если кабель Интернет-провайдера подключён к нему), либо вашего веб-сервера на компьютере (если провод Интернет-провайдера подключён напрямую к компьютеру).

      Почему я думаю, что у вас не белый IP: диапазоны IP адресов для Интернет-провайдеров не бесплатные. А благодаря технологии NAT, Интернет-провайдер может обойтись меньшим количеством IP (сократить свои расходы) при этом большинство пользователей ничего не заметят.

      Даже если по какой-то причине Интернет-провайдер не использует NAT и вам повезло иметь белый IP, то, скорее всего, он будет меняться время от времени. То есть даже если он белый, то он не статичный.

      Вы можете погуглить

      [ваш интернет провайдер] аренда ip адреса

      Например:

      ростелеком аренда ip адреса

      Результат:

      На данный момент стоимость услуги подключения 50 рублей и ежемесячная абонплата 100 рублей за один ip. Хочу заметить, что на один лицевой счет вы сможете заказать один статический ip.

Добавить комментарий

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

wp-puzzle.com logo