Настройка Apache в Windows [черновик]

Это заметка по настройке веб-сервера в Windows, её можно считать продолжением статьи «Установка веб-сервера (Apache 2.4, MySQL 5.7, PHP 7, phpMyAdmin) на Windows 10». Материал в процессе подготовки, но поскольку поступил вопрос, на который она содержит ответ, было решено опубликовать его в таком виде.

Подключение виртуальных хостов Apache в Windows

Виртуальные хосты могут быть привязаны к имени хоста (например, study.loc), к IP (например, 127.0.0.3) и к порту (*:81). Второй и третий способ хороши тем, что нам не придётся решать вопрос о DNS преобразованиях имени нашего виртуального хоста (это, обычно, достигается изменением системного файла C:\Windows\System32\drivers\etc\hosts либо использованием личного DNS сервера с соответствующими записями).

Рассмотрим все три способа. Но начнём с небольшой подготовки. Создадим каталог, в котором будем размещать наши виртуальные хосты. Например, C:\Server\data\htdocs\virthosts\. А в этом каталоге создадим три новых папки: host1, host2, host3. В каждой из них создайте по индексному файлу (index.html) с любым содержанием, который позволил бы идентифицировать, что вы попали в нужный хост. Я сделаю следующие записи в соответствующих индексных файлах хостов, для первого хоста:

You reached host1.

Для второго:

You reached host2.

Для третьего:

You reached host3.

Теперь приступим к настройки виртуальных хостов.

В файле C:\Server\bin\Apache24\conf\httpd.conf найдите и раскоментируйте следующую строку:

Include conf/extra/httpd-vhosts.conf

В файле C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf закомментируйте (или удалите) те строки, которые приведены по умолчанию.

Виртуальные хосты на основе IP

Для виртуальных хостов, которые привязаны к IP, требуются несколько IP. Тем не менее, на своём локальном сервере вы можете проделать этот фокус, поскольку в IPv4, в 127.0.0.1 также отражается любой адрес в пределах от 127.0.0.0 до 127.255.255.255.

Попробуйте набрать в браузере 127.0.0.1, а затем попробуйте 127.0.0.2, 127.0.0.3, 127.0.0.4, 127.0.0.5 и т.д. Как видите, IP у нас много, и к каждому из них можно привязать виртуальных хост.

Добавьте в файл C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf следующие строки:

<VirtualHost 127.0.0.2:80>
    ServerAdmin webmaster@www1.example.com
    DocumentRoot "C:/Server/data/htdocs/virthosts/host2/"
</VirtualHost>

А теперь откройте 127.0.0.2:

01

При этом на другие IP 127.0.0.*, а также на localhost наши настройки влияние не оказывают.

Виртуальные хосты на основе портов (разные сайты на разных портах)

Теперь добавьте в файл C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf строки:

Listen 81
<VirtualHost *:81>
    ServerAdmin webmaster@www1.example.com
    DocumentRoot "C:/Server/data/htdocs/virthosts/host3/"
</VirtualHost>

Порт можете заменить на любой другой, не занятый в вашей системе. Также вместо звёздочки можете указать конкретный IP. Перезапустите и откройте в браузере http://localhost:81:

02

Виртуальные хосты на основе имени хоста

Следующий способ требует редактирование файла C:\Windows\System32\drivers\etc\hosts (либо внесение записи в ваш собственный DNS сервер). Придумайте любое имя хоста, желательно, не совпадающее с реальным. Примеры supersite, study.loc, video.ofme. Я возьму в качестве примера study.loc. Откройте файл C:\Windows\System32\drivers\etc\hosts и добавьте туда:

127.0.0.1 study.loc

А в файл C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf добавьте строки:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "C:/Server/data/htdocs/"
</VirtualHost>

<VirtualHost *:80>
    ServerName study.loc
    DocumentRoot "C:/Server/data/htdocs/virthosts/host1/"
</VirtualHost>

Перезапустите сервер и перейдите в браузере к http://study.loc:

03

Аналогично настраиваются и субдомены (dir1.study.loc, dir2.study.loc, dir3.localhost и т.п.).

Автоматическое создание виртуальных хостов / субдоменов

В файле C:\Server\bin\Apache24\conf\httpd.conf найдите и раскоментируйте следующую строку:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

А также, если вы не сделали этого ранее, строку:

Include conf/extra/httpd-vhosts.conf

В директории C:\Server\data\htdocs\virthosts\ создайте папку localhost (теперь именно её содержимое будет отображаться, когда вы в браузере набираете http://localhost).

В файл C:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf добавьте следующую строку

VirtualDocumentRoot "C:/Server/data/htdocs/virthosts/%1/"

Перезапустите сервер.

Теперь любая папка, созданная в C:\Server\data\htdocs\virthosts\ будет доступна по адресу вида

http://имя_папки.localhost

При открытии http://host1.localhost мы увидим содержимое C:\Server\data\htdocs\virthosts\host1\, при открытии http://super.localhost увидим сайт в C:\Server\data\htdocs\virthosts\super\ и т.д.

Как сделать резервную копию БД MySQL в Windows?

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

Аналогично при бэкапе отдельных баз данных: перейдите на страницу интересующей БД, а далее в Экспорт.

Если вы по каким-то причинам хотите сделать бэкап базы данных MySQL из командной строки в Windows, то для этого понадобиться утилита mysqldump.exe, она поставляется вместе с MySQL и расположена в каталоге C:\Server\bin\mysql-5.7\bin\.

Для её использования откройте командную строку и перетащите туда программу. Программу можно использовать с разнообразными опциями:

Если вы хотите сделать резервную копию всех баз данных в один файл, то выполните:

mysqldump.exe -u root -p --all-databases > all-databases.sql

Кстати, файл нужно искать в той папке, которую вы видите в приглашении командной строки.

Для того, чтобы сделать резервную копию только одной базы данных (например, rsyslog):

mysqldump.exe -u root -p rsyslog > rsyslog.sql

Чтобы сделать резервную копию нескольких баз данных используйте опцию --databases, а после него через пробел перечислите желаемые для бэкапа базы данных:

mysqldump.exe -u root -p --databases rsyslog syslog > rsyslog_syslog.sql

Чтобы сделать резервную копию только одной таблицы (wp_posts) из базы данных (wordpress):

mysqldump.exe -u root -p wordpress wp_posts > wordpress_posts.sql

Для того, чтобы сделать резервную копию нескольких таблиц, перечислите их через пробел после названия БД:

mysqldump.exe -u root -p wordpress wp_posts wp_comments > wordpress_posts_comments.sql

Краткая характеристика основных директив конфигурационных файлов Apache

 

 

 

Настройка ограничения доступа к папкам сервера

 

 

 

 

 

Открытие доступа к веб-серверу Apache в Windows для локальной и глобальной сети

 

 

 

 

Настройка SSL для Apache в Windows (переход с HTTP на HTTPS)

Если вы хотите использовать SSL веб-сервере Apache под Windows, то вам необходимы три файла: *.key, *.csr и *.crt. Если вы купили валидный SSL сертификат для вашего сайта, то эти файлы вам должны прислать после покупки. Их может быть больше – среди них могут быть промежуточные сертификаты.

Если вы хотите настроить SSL на локальном веб-сервере, то все эти файлы можно сгенерировать самостоятельно, т.е. создать самоподписанный сертификат. Этот сертификат не является валидным (не может быть проверен с участием третьей стороны), но для упражнения в переходе с HTTP на HTTPS он вполне подойдёт.

Предполагается, что вы ставили веб-сервер по этой инструкции – иначе замените абсолютные пути на свои собственные.

Откройте командную строку Windows (WIN + x, далее выберите «Командная строка»). В командной строке введите команды:

cd C:\Server\bin\Apache24\bin\
set OPENSSL_CONF=C:\Server\bin\Apache24\conf\openssl.cnf
openssl.exe genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out localhost.key
openssl.exe req -new -key localhost.key -out localhost.csr

При вводе последней команды появятся запросы на английском языке. Ниже следует их перевод.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----

Перевод:

Вас попросят ввести информацию, которая будет включена в запрос вашего сертификата. То, что вы будете вводить, называется Distinguished Name или DN. Там всего несколько полей, которые можно оставить пустыми. В некоторых полях будут значения по умолчанию. Если вы введёте '.', то поле будет оставлено пустым.

Далее:

Country Name (2 letter code) [AU]:

Перевод:

Двухбуквенное имя страны (двухбуквенный код)

Далее:

State or Province Name (full name) [Some-State]:

Перевод:

Название штата или провинции/области (полное имя)

Далее:

Locality Name (eg, city) []:

Перевод:

Название населённого пункта (например, города)

Далее:

Organization Name (eg, company) [Internet Widgits Pty Ltd]:

Перевод:

Название организации (т.е. компании).

Далее:

Organizational Unit Name (eg, section) []:

Перевод:

Подразделение организации (т.е. отдел)

Далее:

Common Name (e.g. server FQDN or YOUR name) []:

Перевод:

Общее имя (например, FQDN сервера или ВАШЕ имя). Можете ввести localhost.

Далее:

Email Address []:

Перевод:

Почтовый адрес

Далее:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Перевод:

Пожалуйста, введите следующие «дополнительные» атрибуты для отправки с вашим запросом сертификата

  • Пароль запроса:
  • Опциональное имя компании:

Теперь выполните команду:

openssl.exe x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt

В результате в каталоге C:\Server\bin\Apache24\bin\ должны появиться три новых файла:

  • localhost.key
  • localhost.csr
  • localhost.crt

Из них нам понадобятся только два:

  • localhost.key
  • localhost.crt

При использовании сертификатов для настройки реального веб-сайта, удобнее создать виртуальный хост с примерно следующими настройками:

LoadModule ssl_module modules/mod_ssl.so

Listen 443
<VirtualHost *:443>
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile "/путь/до/www.example.com.crt"
    SSLCertificateKeyFile "/путь/до/www.example.com.key"
</VirtualHost>

Для настройки использования SSL на локальном веб-сервере Apache в Windows следуйте инструкции ниже.

В каталоге C:\Server\ создайте новую папку certs и переместите туда файлы localhost.key и localhost.crt.

В директории C:\Server\bin\Apache24\conf\ откройте текстовым редактором файл httpd.conf. В самый низ добавьте туда строки:

LoadModule ssl_module modules/mod_ssl.so

Listen 443
SSLEngine on
SSLCertificateFile "C:\Server\certs\localhost.crt"
SSLCertificateKeyFile "C:\Server\certs\localhost.key"

После этого сохраните изменения, закройте файл и перезапустите веб-сервер.

Для проверки сделанных изменений, перейдите по адресу https://localhost/ (протокол HTTPS). Поскольку сертификат является самоподписанным, то появится такое сообщение:

К самоподписанным сертификатам нет доверия и эту ошибку нельзя убрать без добавления таких сертификатов в доверенные. Для перехода нажмите «Всё равно продолжить».

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

Файл .bat для управления сервером (установка сервера, запуск, перезапуск и др.)

Создайте файл RUN.bat и скопируйте в него:

Сохраните и закройте файл. Запускайте файл двойным кликом. При этом будет появляться текстовое меню для управления веб-сервером:

Включение модулей по отображению информации и статуса сервера

Если вы хотите удалённо мониторить состояние сервера (возможно, с помощью автоматизированных скриптов или программ), то вам может пригодиться включение модулей mod_status и mod_info.

В файле C:\Server\bin\Apache24\conf\httpd.conf найдите и раскоментируйте следующие строки:

LoadModule status_module modules/mod_status.so
LoadModule info_module modules/mod_info.so
Include conf/extra/httpd-info.conf

В файле C:\Server\bin\Apache24\conf\extra\httpd-info.conf измените приведённые строки (или просто их удалите и замените на предлагаемые), чтобы получилось:

<Location /server-status>
    SetHandler server-status
    Require host localhost
    Require ip ::1
</Location>

<Location /server-info>
    SetHandler server-info
    Require host localhost
    Require ip ::1
</Location>

Раскоментируйте строку:

ExtendedStatus On

Перезапустите сервер.

Теперь при обращении по адресам http://localhost/server-info и http://localhost/server-status вы сможете наблюдать в режиме реального времени информацию и статус сервера.

Рекомендуемые статьи:

3 комментария to Настройка Apache в Windows [черновик]

  1. Дмитрий:

    Спасибо Вам за подробную инструкцию.

    Сделал Автоматическое создание виртуальных хостов / субдоменов

    В опере всё работает а в IE, SAFARI, Firefox

    нет, работает только http://localhost/

    а созданные папки например - http://site.localhost/ не работает

    как исправить?

  2. Павел:

    Сделал настройку SSL по данной инструкции, но после этого Apache перестал работать. При запуске httpd.exe просто сразу закрывается, а ApacheMonitor.exe показывает ошибку "The request operation has failed!". Если удалить из httpd.conf последние 5 строк, то Apache снова начинает работать.

    В чем может быть ошибка?

  3. Павел:

    Исправил проблему изменением в последних 5 строчках! Вместо Listen 443 из инструкции указал Listen 127.0.0.1:443

    Теперь https работает.

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

Ваш e-mail не будет опубликован.