Зачем устанавливать Apache HTTP Server на домашний ПК? Мне случалось делать это два раза. Первый раз — когда я изучал программирование веб-приложений (HTML-CSS-JavaScipt-PHP-MySQL). И я, естественно, не собирался размещать свой игрушечный сайт в интернете, поэтому я должен был разместить его на своем ПК. И второй раз — вот сейчас — когда я захотел завести блог и протестировать его на своем домашнем ПК (см. предыдущий пост). Итак, поехали.
Установка
- Скачиваем дистрибутив сервера Apache HTTP Server. Мой ПК работает под управлением Windows (точнее — 64-разрядная Windows 10), поэтому мне надо качать готовую сборку (а не исходный код) с одного из сайтов, список которых приведен на сайте httpd.apache.org. Я скачиваю ее с сайта Apache Lounge в виде zip-архива. На момент написания этого поста самой свежей была версия сборки 2.4.29.
-
Залезаем в скачанный нами архив и читаем файл ReadMe.txt, в котором написано, что распаковывать архив надо не куда-нибудь, а на диск C: (т. е. надо скопировать из архива на диск C: папку Apache24). Почему? Потому что в конфигурационном файле httpd.conf (это специальный файл, который хранит всякие настройки сервера Apache) все директивы настроены в предположении, что папка Apache24 находится в корне диска C:, например, директива
ServerRoot "c:/Apache24"
и многие другие. Итак, распаковываем архив на диск C. - В папке C:\Apache24\bin лежит файл httpd.exe. Это — исполняемый файл нашего сервера. Запуская его, вы запускаете сервер. Давайте добавим в переменную окружения PATH путь к папке с файлом httpd.exe. Нужно это для того, чтобы, если вы захотите запустить httpd.exe из командной строки, вам не не пришлось при помощи команд cd переходить в папку, где этот файл лежит. Чтобы изменить переменную окружения PATH в Windows 10 надо запустить классическое приложение Панель управления (его можно найти в поиске на панели задач). Далее Панель управления\Система и безопасность\Система\Дополнительные параметры системы\Переменные среды\Системные переменные\PATH\Изменить\Создать C:\Apache24\bin. Нажать ОК.
-
Если теперь попытаться запустить httpd.exe, из командной строки, то он запустится и выведет сообщение об ошибке
Could not reliably determine the server's fully qualified domain name... Set the 'ServerName' directive globally to suppress this message
. В файле C:\Apache24\conf\httpd.conf находим директивуServerName
и меняем ее так:ServerName localhost:80Пока для целей тестирования не имеет значения, какой URL вы введете в этой директиве, но поскольку у вашего сервера нет зарегистрированного доменного имени, то лучше ввести localhost (вы также можете ввести ip-адрес вашего ПК или так называемый loopback-адрес 127.0.0.1). После этого можно запускать сервер.
-
Если вы хотите, чтобы все выглядело так, будто у вашего сервера есть настоящее зарегистрированное доменное имя (например, dvsav.ru), то откройте в текстовом редакторе файл C:\Windows\System32\drivers\etc\hosts (текстовый редактор надо запускать от имени администратора) и добавьте в него строку
127.0.0.1 dvsav.ru
Теперь вы сможете вводить в адресной строке браузера dvsav.ru.
Запуск
-
Есть два способа запустить Apache HTTP Server:
- Запустить процесс httpd.exe (из командной строки или из проводника Windows). Этот процесс и есть сервер. Остановить его можно только одним способом: щелкнув на кнопке с крестиком в правом верхнем углу окна командной строки.
-
Запустить httpd.exe как службу Windows (службы Windows — это программы, которые не имеют никакого пользовательского интерфейса, могут запускаться автоматически при старте операционной системы и могут запускаться от имени операционной системы). Но для того, чтобы запустить httpd как службу, нужно ее определенным образом «установить» в ОС Windows. Это можно сделать из командной строки (командную строку cmd.exe надо запускать от имени администратора):
httpd -k install
Обратите внимание, что после установки служба сконфигурирована на автоматический запуск при старте Windows. Чтобы изменить это поведение, надо зайти в классическое приложение Панель управления\Система и безопасность\Администрирование\Службы . Выбираем службу, которая имеет в своем названии слово Apache, и в контекстном меню выбираем Свойства\Тип запуска\Вручную. В этом же контекстном меню можно запустить или остановить службу.
Также можно запустить службу, введя в командной строке (командную строку cmd.exe надо запускать от имени администратора):httpd -k startа остановить можно так:
httpd -k stop
- Запускаем сервер одним из указанных выше способов. Теперь запускаем веб-браузер и в адресную строку вводим http://localhost/ (или http://127.0.0.1:80/ или можете ввести в адресную строку ip-адрес своего компьютера (его можно узнать при помощи команды командной строки ipconfig)). Должна появиться страница с текстом It Works!. Будьте внимательны при тестировании работы сайта! Веб-браузеры кэшируют веб-страницы, поэтому, если вы например изменили конфигурацию сервера или контент сайта, а затем нажали кнопку «обновить» в браузере, то он может выдать вам старую страницу, так как он ее закэшировал. Нажимайте кнопку «обновить» несколько раз.
-
Решение проблем
При запуске httpd.exe из командной строки в командную строку выводится абракадабра.
Сообщения, которые выводит в консоль httpd.exe, имеют кодировку 1251, поэтому для того, чтобы они отображались нормально, а не в виде абракадабры, перед тем, как запустить httpd.exe смените кодовую страницу, выполнив командуchcp 1251
Сервер не запускается либо при попытке открыть страницу http://localhost/ веб-браузер выдает ошибку 404 (страница не найдена).
Сервер Apache по-умолчанию должен прослушивать порт 80. Проблема может возникнуть из-за того, что другая программа уже прослушивает этот порт (например у меня это был skype).Чтобы выяснить, кто прослушивает порт 80, можно воспользоваться стандартной утилитой netstat.exe. Введите в командной строкеnetstat -a -b > C:\netstat_out.txtНа диске C: появится файл netstat_out.txt, открыв который, вы увидите какой процесс или служба какой ip-адрес и порт прослушивает. После этого программу или службу, прослушивающую порт 80, надо просто остановить.
Настройка
Теперь, если все нормально работает, рассмотрим некоторые настройки сервера, специфичные для случая, когда вы устанавливаете его на свой домашний ПК с целью тестирования своего сайта. В целях безопасности я хотел бы настроить сервер так, чтобы он реагировал на HTTP-запросы только от моего ПК и ни от какого другого хоста в сети. Настройка сервера Apache производится путем редактирования файла C:\Apache24\conf\httpd.conf. Формат файла напоминает XML. Настройки задаются при помощи так называемых директив. Чтобы настройки вступили в силу, после изменения файла httpd.conf нужно перезапустить сервер.
-
Директива Listen заставляет Apache прослушивать определенный IP-адрес и порт и не прослушивать другие IP-адреса и порты, имеющиеся у компьютера. Я хочу, чтобы сервер прослушивал только loopback-адрес 127.0.0.1, поэтому пишу в httpd.conf директиву
Listen 127.0.0.1:80
С тем же успехом можно написать
Listen localhost:80Теперь к серверу можно будет обратиться только с локального ПК (т. е. с того ПК, на котором установлен этот сервер).
-
Находим в файле httpd.conf директиву
<Directory "c:/Apache24/htdocs">
и изменяем ее так:<Directory "c:/Apache24/htdocs">
AllowOverride FileInfo
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>Настройки внутри директивы
Directory
распространяются только на указанную директорию и ее поддиректории. По-умолчанию сервер считает, что файлы нашего сайта будут находиться в директории c:/Apache24/htdocs, поэтому ее мы и настраиваем.
Первоначально я написал директивуAllowOverride none
, которая запрещает так называемую per-directory configuration для всего сайта целиком (это улучшает производительность). Per-directory configuration позволяет любой директории сайта иметь собственный конфигурационный файл (по-умолчанию все такие файлы имеют имя .htaccess), который может переопределять (override) для своей директории настройки, указанные в файле httpd.conf. Как выяснилось позднее, чтобы нормально работал WordPress, все-таки надо было разрешить per-directory configuration, написавAllowOverride FileInfo
.
ДирективаOrder Deny,Allow
управляет последовательностью выполнения директив Allow и Deny (см. далее). При наличии противоречия между двумя директивами Allow и Deny действие возымеет директива, выполнившаяся последней.
ДирективаDeny from all
запрещает доступ к сайту с любого хоста. Хост, которому запрещен доступ к сайту получит сообщениеForbidden. You don't have permission to access / on this server
.
ДирективаAllow from 127.0.0.1
— разрешает доступ к сайту с локального компьютера.
Несколько сайтов на одном сервере
И последнее, о чем хотел сказать, хотя это не имеет особого отношения к рассматриваемой нами сейчас задаче тестирования блога. Предположим, вы хотите содержать несколько сайтов на одном сервере. IP-адрес у них скорее всего будет одинаковый (если у вас нет нескольких сетевых карт в компьютере), а доменные имена разные. Также у них будут разные корневые директории. Apache Server может автоматически распознавать, к какому сайту обращен тот или иной HTTP-запрос (если в запросе указано доменное имя сайта). Но для этого Apache надо определенным образом настроить. Допустим вы хотите иметь на одном сервере два сайта: www.my-first-site.com и www.my-second-site.com. В самый конец файла httpd.conf добавьте следующий текст:
ServerAdmin admin@example.com
DocumentRoot C:/www/my-first-site
ServerName www.my-first-site.com
ErrorLog logs/error_my-first-site.log
CustomLog logs/access_my-first-site.log common
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerAdmin admin@example.com
DocumentRoot C:/www/my-second-site
ServerName www.my-second-site.com
ErrorLog logs/error_my-second-site.log
CustomLog logs/access_my-second-site.log common
</VirtualHost>
Предполагается, что на диске C:\ существует папка www, в которой есть еще две папки: my-first-site и my-second-site. admin@example.com замените на адрес своей почты. Директивы ErrorLog и CustomLog задают файлы, куда будут писаться логи (файлы будут созданы сервером автоматически). Пути к файлам задаются относительно ServerRoot. common — это формат по-умолчанию для записей, которые добавляются в лог. common — это краткое обозначение формата %h %l %u %t \»%r\» %>s %b.
Ну вот и все. Далее рассмотрим как включить в Apache HTTP Server поддержку PHP — скриптового языка для разработки веб-приложений.
Литература
- Julie C. Meloni — Sams Teach Yourself PHP, MySQL and Apache All in One, 5th Edition — 2012
- Mohammed J. Kabir — Apache Server 2 Bible — 2002
- Apache HTTP Server Version 2.4 Documentation