С тех пор как я ставил Apache последний раз под Windows много чего уже поменялось. Уже нет установщика Apache и все делается в ручную. И даже сам дистрибутив качается не с самого сайта Apache, а с других ресурсов. И кроме того тогда Apache был 32-х разрядным. Сейчас он уже x64. Ну что? Поехали!
Будем устанавливать:
- Apache 2.4.18 x64 (необходимо примерно 44Гб)
- PHP 7.0.3 x64 (необходимо примерно 57Гб)
- MySQL 5.7.11 x64 (необходимо примерно 325Гб)
В скобках примерно указано пространство на диске которое необходимо для установки данных продуктов. Для Apache и MySQL оно не включает пространство под сайты, базы данных и логи. Поэтому я размещаю файлы сервисов и данные на разных дисках дабы не мешать все в одну кучу.
1) Сперва создаем структуру каталогов где у нас будут лежать файлы сервера Apache, PHP, MySQL и всего что еще может понадобиться в будущем для Web сервера. А так же создадим структуру каталогов где у нас будут непосредственно лежать файлы наших сайтов. Я люблю разносить эти две структуры на разные диски. Так как это, для меня лично, удобней для архивирования и безопасности. Вы можете конечно делать по своему, но тогда пути в настройках прописывайте такие как будут у вас.
1.1) В корне диска D: создаем каталог iServer и в ней папки PHP и Apache.
1.2) Прописываем путь к папке PHP в системную переменную PATH. Надеюсь как это сделать не надо объяснять? Если надо то смотрим тут.
1.3) В корне диска E: создаем две папки iSites (тут будут лежать наши сайты) и iLogs (тут будут жить общие логи сервера).
1.4) В папке G:\iSites создаем два подкаталога localhost и testru и далее в каждом из них свои подкаталоги www,log и ssl
2) Теперь надо скачать бинарники Apache. Все! Приехали! Больше ни каких установщиков нет! Все по взрослому :)
Для того чтобы чтобы скачать идем сюда http://httpd.apache.org/download.cgi и видим примерно это (зависит от даты когда вы будете читать эту мою статью :) ):
На текущий момент последняя версия Apache 2.4.18. После того как нажмем на указанную ссылку попадаем вот сюда:
Далее жмем на Apache Lounge и приходим сюда:
Как видим теперь надо качать не только Apache, но и С++ Redistributable, в нашем случае для x64. Редист надо качать если он у вас в системе не установлен. Если установлен, то качаем только Apache. У меня редиста не было поэтому я качаю и его.
Итого скачано два файла:
3) Сперва устанавливаем редист. Здесь все просто: запускаем его и ставим.
4) Вытаскиваем (разархивируем) из скачанного архива папку Apache24
4.1) И все содержимое папки Apache24 (а не саму папку) переносим в каталог D:\iServer\Apache. В результате должно получиться так:
5) Настраиваем Apache для первоначального запуска редактированием файла D:/iServer/Apache/conf/httpd.conf
5.1) Изменяем значение ServerRoot (строка 37) на "D:/iServer/Apache".
5.2) Изменяем значение DocumentRoot (строка 243) на "E:/iSites/localhost/www"
5.3) Изменяем значение Directory (строка 244) на "E:/iSites"
5.4) Изменяем значение ErrorLog (строка 295) на "E:/iLogs/error.log"
5.5) Изменяем значение CustomLog (строка 324) на "E:/iLogs/access.log" combinedio
5.6) Раскомментируем 130 и 493:
LoadModule logio_module modules/mod_logio.so
Include conf/extra/httpd-vhosts.conf
5.7) Раскоментируем и изменяем значение ServerName (строка 219) на localhost:80
5.8) Языковые настройки. Редактируем файлик D:\iServer\Apache\conf\extra\httpd-languages.conf. Комментируем все строки AddLanguage с теми языками, которые нам не нужны. Я оставил только строки:
AddLanguage en .en
AddLanguage ru .ru
Находим строку LanguagePriority и убираем там все языки, которые не нужны. У меня эта строчка выглядит так:
LanguagePriority en ru
Сохраняем файл.
В файле httpd.conf расскомментируем строчку Include conf/extra/httpd-languages.conf.
5.9) Включаем SSI. В файле httpd.conf находим строки:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
И расскоментируем их.
Находим блок <Directory "E:/iSites"> и в нем строку Options Indexes FollowSymLinks. Приводим ее к виду Options Indexes FollowSymLinks Includes
В каталоге E:\iSites\localhost\www создаем файл ssi.html со следующим содержимым:
SSI тест прошел успешно - ssi.html!
Затем, там же создаем файл ssitest.shtml со следующим содержимым:
<!--#include virtual="/ssi.html" -->
6) Подготавливаем файл hosts для проверки работы виртуальных хостов на нашем web сервере. Файл hosts обычно находится по пути C:\WINDOWS\system32\drivers\etc\ и добавляем в него запись 127.0.0.1 test.ru и сохраняем.
7) Идем в папку D:\iServer\Apache\conf\extra и редактируем файл httpd-vhosts.conf. Приводим его к вот такому виду:
8) Подготавливаем тестовые файлы для проверки виртуальных хостов.
8.1) В каталоге E:\iSites\localhost\www создаем файлик index.html со следующим содержимым:
<H1>It is my LocalHost</H1>
8.2) В каталоге E:\iSites\testru\www создаем файлик index.html со следующим содержимым:
<H1>It is my TEST.RU</H1>
9) Устанавливаем сервис Apache. Для этого запускаем командную строку от имени администратора и в каталоге D:\iServer\Apache\bin даем команду:
httpd.exe -k install
После чего служба будет установлена в системе, но еще не будет запущена. В чем можно убедиться в оснастке служб Windows^
Как видим служба установлена, но не запущена и запускается она под учетной записью локальной системы, что не есть гуд и мы это чуть позже поправим.
10) Запуск сервис Apache можно сделать прямо из этой же оснастки или же из ApaceMonitor.exe которая находится во каталоге D:\iServer\Apache\bin.
10.1) Запустим ApacheMonitor.exe, после этого в системном трее появится ярлык. Кликаем на нем два раза и видим (если сервис не запущен) это:
Чтобы запустить жмем Start и, если все правильно сделали, то увидите это:
ApacheMonitor.exe можно поставить в автозагрузку. Для этого жмем Win+R и далее вводим shell:Startup ну и помещаем туда ApacheMonitor.exe.
11) Проверяем что наш сервер работает. Заходим в браузере по адресам localhost и test.ru. И если все правильно сделали то видите это:
11.1) Проверяем работу shtml и русского языка. В броузере вводим адрес http://localhost/ssitest.shtml и видим следующее:
Ура! Товарищи! Первый этап заработал!
12) Устанавливаем PHP 7.0.3. Для этого скачиваем zip архив от сюда http://windows.php.net/download#php-7.0. На момент этой статьи файл назывался php-7.0.3-Win32-VC14-x64.zip.
12.1) Разархивируем содержимое архива в каталог D:\iServer\PHP
12.2) Прикручивать PHP к Apache будем как модуль Apache. Для этого идем в каталог E:\iServer\Apache\conf, и добавляем в файлик httpd.conf в окончание блока инструкций LoadModule две строки:
LoadModule php7_module "D:/iServer/PHP/php7apache2_4.dll"
PHPIniDir "D:/iServer/PHP"
12.3) Находим в файлике httpd.conf инструкции AddType, в конец этого блока вставляем инструкцию:
AddType application/x-httpd-php .php
12.4) Находим в файле httpd.conf блок инструкций DirectoryIndex. И добавляем в инструкцию DirectoryIndex указание на файл index.php. Чтобы в конечном виде инструкция выглядела так:
DirectoryIndex index.html index.php
12.5) В файле httpd.conf в секцию AddHandler добавляем строку AddHandler application/x-httpd-php .php
12.6) Теперь настала очередь конфигурить файл php.ini. Для этого переименовываем или копируем файл php.ini-production (в каталоге D:\iServer\PHP) в файл php.ini.
12.7) В файле php.ini раскоментируем строку extension_dir = "ext" и необходимые вам расширения
12.8) Находим в файле php.ini строку short_open_tag = Off. И приводим ее к виду short_open_tag = On
12.9) Создаем в каталоге E:\iSites\localhost\www файлик phptest.php и пишем в нем следущий код:
<?
phpinfo();
?>
Сохраняем файлик.
12.10) Останавливаем и снова запускаем Apache через консоль управления Apache. После перезапуска Apache можно открыть окно управления сервисом Apache дважды кликнув по иконке в трее. Должны увидеть следующее окошко:
Обратите внимание что теперь с версией Apache, так же указывается и версия PHP.
12.11) Тестируем работу PHP. Набираем в браузере http://localhost/phptest.php и видим следующую картинку и радуемся жизни. PHP заработал:
12.12) Еще для теста включим функции PHP для работы с графикой. Редактируем файлик D:\iServer\PHP\php.ini. Находим строку extension=php_gd2.dll и раскоментируем ее. Перезапускаем Apache.
В каталоге G:\iSites\localhost\www создаем файлик gdtest.php и вводим следующий код:
<?
$pic=imagecreate(350,100);
$piccolor=imagecolorallocate($pic, 255,255,255);
$textcolor=imagecolorallocate($pic, 0,0,0);
$linecolor=imagecolorallocate($pic, 0,0,255);
$text="GD test successful - gdtest.php!";
imagerectangle($pic, 1,99, 349,0, $linecolor);
imagestring($pic,5,30,40, $text, $textcolor);
header("content-type: image/png");
imagepng($pic);
imagedestroy($pic);
?>
Вводим в браузере адрес http://localhost/gdtest.php и видим:
Если не видим, то как обычно курим мануал до полного просветления :)
13) Теперь настроим rewrite_module, оч полезная штука :). В файле httpd.conf расскомментируем строчку
LoadModule rewrite_module modules/mod_rewrite.so
Далее ищем конструкцию (у меня начало в строке 230)
<Directory />
AllowOverride none
Require all denied
</Directory>
И заменяем в ней строку AllowOverride None на строку AllowOverride All
Затем чуть ниже так же будет просто строка AllowOverride None ее надо поменять на AllowOverride All
Это включает обработку ВСЕХ параметров ВСЕХ .htaccess во всех каталогах.
Теперь проверяем работу модуля rewrite. Рестрартуем Apache
В каталоге E:\iSites\localhost\www создаем файлик .htaccess и в него вносим одну строку
Redirect /index.html http://ya.ru
эта строка перенаправляет с файла index.html на сайт ya.ru
В браузере просто набираем localhost и нас должно перебросить на страничку ya.ru
Если сработало, то все настроили правильно. Ну а если нет, то ищем где накосячили.
14) Устанавливаем MySQL. Идем сюда и качаем установщик mysql-installer-community-5.7.11.0.msi. Стоит обратить внимание что хоть файл msi 32 разрядный, но он устанавливает обе версии x32 или x64 в зависимости от платформы. И так, клацаем по нему и понеслась установка…
Затем видим это и начинаем выбирать нужные вам компоненты и удалять не нужные…
Я выбрал следующие компоненты:
Затем жмем Advanced Options…
И выбираем куда будет установлен MySQL server и где будут лежать его базы:
Жмем ОК и Next и видим что установщику для работы Workbench нужен редист. Но как он сообщает он сам попробует его установить
Жмем Execute и видим:
Ну и ставим редист … и теперь у нас все хорошо
Жмем Next
И жемем Execute…
Настало время сконфигурировать MySQL…
Далее задаем root пароль и создаем первого пользователя – администратора баз данных.
Ну и жмем Execute…
После нажатия на Finish запуститься Workbench…
Подключимся с его помощью к MySQL
Если мы видим это, то значит сервер установился и работает. Но Apache пока с ним работать не может.
14.1) Чуть чуть донастроим MySQL. По умолчанию он хранит временные файлы на системном диске, что я считаю не есть гуд. Поэтому переносим временные файлы в другое место. Для этого в файле E:\MySQLdb\my.ini в секции [mysqld] добавляем строку tmpdir=E:/MySQLtemp. Естественно каталог E:\MySQLtemp должен уже быть создан. Перезапускаем MySQL сервис и наслаждаемся видом:
14.2) Проверяем работу MySQL (пока отдельно без привязки к Apache и PHP). Даем из командной строки в директории D:\iServer\MySQL\bin команду
mysql.exe -h localhost -P 3306 -u root -p
вводим пароль и даем следующую команду
show databases;
И видим:
15) Прикручиваем MySQL к Apache, хотя вернее сказать к PHP, ну а он уже прикручен к Apache. Вот такой паровозик получается. Итак редактируем файлик D:\iServer\PHP\php.ini. Находим в нем строчки
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
и раскомментируем их. Затем находим строку mysqli.default_port = и приводим ее к виду mysqli.default_port = 3306. Далее находим строку mysqli.default_host = и приводим ее к виду mysqli.default_host = localhost
Перезапускаем Apache.
В каталоге E:\iSites\localhost\www создаем файлик mysqltest.php и вводим туда следующий код:
<?
try {
$DBH = new PDO("mysql:host=localhost", "root", "ВАШ ПАРОЛЬ");
foreach($DBH->query('SELECT CURDATE()') as $row) {
echo "<tr>";
echo "<td>" . $row['CURDATE()'] . "</td>";
echo "</tr>";
}
$DBH = null;
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
В браузере вводим адрес http://localhost/mysqltest.php и если все сделали правильно, то видим текущую дату. Это значит что PHP может работать с MySQL.
Подведем небольшой итог. Сейчас у нас работает по Windows Server 2008R2 x64 Apache 2.4 x64 + PHP 7.0.3 x64 + MySQL 5.7.11 x64. Все это дело заняло на диске D: достаточно места:
Сравните с тем свободным местом на диске D: что было в начале.
Поэтому заранее планируйте пространство на ваших дисках.
Хотя данные сервисов (сайты, логи и базы) пока еще почти ни чего не занимают, но со временем они имеют свойство разрастаться. Поэтому лучше их держать на отдельном диске, так же как и сервисы, дабы ни то ни другое не забивало системный диск.
16) Теперь остается только сделать чтобы сервис Apache работал не под системной учеткой, а под обычным пользователем. По умолчанию, при установке, сервис Apache запускается под пользователем SYSTEM, который имеет в системе максимальные права. Это не есть гуд. Сейчас будем исправлять эту ситуацию.
16.1) Создаем и настраиваем учетную запись под которой будем запускать Apache.
- создаем учетную запись iUser и назначаем ей пароль срок действия которого ни когда не истекает
- проверяем чтобы она входила только в группу пользователи
- запрещаем для пользователя iUser локальный вход и выставляем право работать в режиме операционной системы и вход в качестве службы через оснастку gpedit.msc
- Даем учетной записи iUser право на запись в каталоги необходимые для работы Apache:
E:\iLogs – общие логи Apache
В каталоги лог файлов сайтов. В нашем случае: E:\iSites\localhost\log и E:\iSites\testru\log - В будущем если понадобятся разрешения на запись в какую либо папку или файл вашего сайта, то эти разрешения необходимо добавить. Но на большинство файлов вашего сайта не должно быть разрешения на запись. И тем более на файл .htacess
- Перезапускаем службу Apache2.2
- Ну и проверяем работу зайдя по адресу http://localhost
Если сделали все правильно, то все должно работать.
17) И так у нас все работает хорошо локально. А что если попробовать подключиться к нашему веб серверу по сети? И вот тут сюрпрайз :) Ни кто не сможет подключиться, так как на Windows Server 2003R2, по умолчанию, этот порт закрыт файрволом. Поэтому надо создать правило разрешающие входящее подсоединение к 80 порту.
18) Запрещаем выдавать Apache свою версию и версию PHP. Эта информация может позволить точно узнать уязвима ваша версия Apache и PHP или нет. Лучше это отключить, так как любой, даже самый простой сканер вам покажет эти данные:
Кстати, тут так же видно что Location у нас http://ya.ru. Это как раз сработал наш mod_rewrite – еще одна защита.
18.1) Чтобы запретить Apache показывать свою версию и версию PHP делаем следующее:
- В файле раскоментируем строку Include conf/extra/httpd-default.conf
- В файле D:\iServer\Apache\conf\extra\httpd-default.conf ищем параметр ServerTokens и меняем его значение с Full на Prod и перезапускаем Apache.
И теперь у нас Apache показывает только это:
Согласитесь это уже приятней :) ?
Для полного счастья осталось только рассказать как прикрутить к Apache SSL сертификаты для виртуальных сайтов. Но об этом в другой статье. Хотя я уже про это писал тут. Но времена меняются и сейчас все чуть по другому, но суть от этого не поменялась.
5 комментариев:
Спасибо! Супер!
пожалуйста
Здравствуйте .Спасибо за статью . Подскажите пожалуйста первый раз сталкиваюсь с задачей поднятия сервера . Ваша статья написана более года назад . Если занимаетесь ещё чем то подобным может есть какие нибудь новые советы ?
Нет новых советов нет. Все советы старые :)
При вбивании в адресную строку "http://localhost/ssitest.shtml" после записи всех конфигов и запуска Апача выдаёт "The requested URL was not found on this server.".
Есть идеи, где мог накосячить?
Отправить комментарий