Apache – установка и настройка веб-сервера

На Windows Apache устанавливают из ZIP-архива, на Ubuntu и Debian – через пакетный менеджер apt. После запуска сервер открывает страницы из указанной папки. Эта инструкция поможет настроить Apache 2.4 для локальной разработки или Linux-сервера: подключить два сайта, разрешить .htaccess и включить HTTPS. Команды для разных систем приведены отдельно.

Что такое Apache и когда его выбирать

Apache HTTP Server принимает HTTP-запросы браузера и возвращает содержимое сайта. Сервер раздает HTML, изображения и другие файлы. Модули добавляют обработку HTTPS, перенаправления, авторизацию и связь с приложениями.

Apache удобно выбирать для приложений с настройками через .htaccess. Эти файлы меняют поведение отдельных каталогов без редактирования основного конфига. Nginx не читает .htaccess: его правила хранятся в конфигурации сервера. Оба сервера умеют раздавать файлы и проксировать запросы приложениям.

Установка Apache на Windows

Для Windows используйте ZIP-сборку Apache Lounge ветки 2.4. Архив содержит сервер, конфигурацию и вспомогательные программы. Установка Apache этим способом не требует MSI-установщика.

  1. На сайте Apache Lounge перейдите к загрузкам. Для 64-разрядной Windows выберите ZIP-архив Apache HTTP Server 2.4 Win64. Инструкция рассчитана на эту сборку.
  2. Установите Microsoft Visual C++ Redistributable, который указан в описании выбранной сборки или ее README. Разрядность runtime должна соответствовать Apache. Используйте официальную страницу загрузки Microsoft. При успешной установке программа завершится без сообщения об ошибке.
  3. Распакуйте папку Apache24 из архива в корень диска C. Убедитесь, что файл сервера находится по адресу C:\Apache24\bin\httpd.exe. Вложенной папки C:\Apache24\Apache24 быть не должно.
  4. Откройте C:\Apache24\conf\httpd.conf текстовым редактором. Найдите определение SRVROOT и задайте путь из примера. Существующие строки заменяйте, а не дублируйте.
Define SRVROOT "C:/Apache24"
ServerRoot "${SRVROOT}"
ServerName localhost:80

Для локальной разработки замените строку Listen 80 следующей настройкой. Она ограничивает доступ к серверу вашей машиной.

Listen 127.0.0.1:80

Откройте поиск Windows и введите cmd. Запустите найденную командную строку с правами администратора, подтвердите запрос системы. Команды этой инструкции вводите именно в cmd.

cd /d C:\Apache24\bin
httpd.exe -t

Ответ Syntax OK означает, что Apache принял синтаксис конфигурации. Если сервер указал файл и строку ошибки, исправьте их перед продолжением.

Зарегистрируйте Apache как службу и запустите ее:

httpd.exe -k install -n "Apache24"
httpd.exe -k start -n "Apache24"

Откройте в браузере http://localhost/. Для стандартной стартовой страницы ожидается надпись «It works!». Также проверьте http://127.0.0.1/: этот адрес исключает проблемы разрешения имени localhost.

Запустите C:\Apache24\bin\ApacheMonitor.exe, если хотите управлять службой через значок в области уведомлений. ApacheMonitor запускает и останавливает зарегистрированный сервер, но не редактирует его конфигурацию. Для автозапуска откройте services.msc и задайте службе Apache24 автоматический тип запуска.

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

httpd.exe -k stop -n "Apache24"
httpd.exe -k uninstall -n "Apache24"

Установка Apache на Ubuntu и Debian

Apache на Ubuntu и Debian устанавливается пакетом apache2. Команды выполняйте в терминале машины или в SSH-сеансе. Учетной записи нужны права sudo.

sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2
sudo systemctl status apache2 --no-pager

Строка active (running) показывает, что служба работает. Команда enable --now одновременно запускает сервер и включает автозапуск. Откройте http://127.0.0.1/ на самой машине или HTTP-адрес сервера с другого компьютера. Браузер должен показать стандартную страницу Apache для дистрибутива.

Если адрес неизвестен, выполните ip -br address. Найдите адрес сетевого интерфейса, через который подключен сервер. Для облачной машины публичный адрес также указан в панели провайдера.

Если вы используете UFW, посмотрите его состояние и разрешите входящие подключения на порты 80 и 443:

sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Эти команды не включают неактивный UFW.

Не включайте firewall удаленно, пока не разрешили используемый порт SSH: иначе вы потеряете доступ. У облачного сервера откройте порты 80 и 443 также в сетевых правилах провайдера. Для рабочего публичного сайта они должны пропускать внешние подключения.

Локальной машине без внешних посетителей такой доступ не нужен.

Команда sudo systemctl restart apache2 полностью перезапускает службу. Команда sudo systemctl stop apache2 останавливает сервер, сохраняя установленные файлы.

Где лежат настройки Apache

Настройка Apache зависит от способа установки. Windows-сборка использует основной httpd.conf и подключаемые файлы. Пакет Debian/Ubuntu разделяет настройки сайтов, модулей и сервера.

НазначениеWindows из этой инструкцииUbuntu и Debian
Основной конфигC:\Apache24\conf\httpd.conf/etc/apache2/apache2.conf
СайтыC:\Apache24\conf\extra\httpd-vhosts.conf, если подключен через Include/etc/apache2/sites-available/
Включенные сайтыКонфиги, подключенные через Include/etc/apache2/sites-enabled/
МодулиСтроки LoadModule в конфигурации/etc/apache2/mods-enabled/
ПортыДирективы Listen/etc/apache2/ports.conf

Перед изменениями сохраните копию редактируемого файла. Для Linux удобно использовать sudo cp /путь/файл /путь/файл.bak, подставив настоящий путь. Конфиги редактируйте с правами администратора, например через sudoedit /etc/apache2/apache2.conf.

На Windows проверяйте конфигурацию перед каждым перезапуском. Команду restart выполняйте только после ответа Syntax OK:

cd /d C:\Apache24\bin
httpd.exe -t
httpd.exe -k restart -n "Apache24"

На Ubuntu и Debian используйте проверку и плавное применение изменений:

sudo apachectl configtest
sudo systemctl reload apache2

Reload перечитывает настройки без обычной полной остановки службы. Если проверка обнаружила ошибку, не применяйте конфиг. Восстановите копию, повторите проверку и только затем перезагрузите настройки.

Как изменить корневую папку сайта

Директива DocumentRoot задает каталог с файлами сайта. Блок <Directory> разрешает Apache обслуживать этот каталог. Одной смены DocumentRoot недостаточно: сервер может вернуть ошибку 403.

Корневая папка на Windows

Создайте папку C:\www. В httpd.conf замените существующий DocumentRoot и блок Directory для прежнего корня сайта:

DocumentRoot "C:/www"
<Directory "C:/www">
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
    DirectoryIndex index.html
</Directory>
AddDefaultCharset UTF-8

В путях конфигурации Windows используйте прямые слеши /. Настройку для <Directory />, ограничивающую доступ ко всей файловой системе, не ослабляйте. Старый синтаксис Order/Allow/Deny устарел и заменен на Require.

Корневая папка на Ubuntu и Debian

Создайте каталог сайта и откройте чтение файлов для сервера:

sudo mkdir -p /var/www/site1/public
sudo chmod 755 /var/www/site1 /var/www/site1/public

Откройте /etc/apache2/sites-available/000-default.conf через sudoedit. Внутри существующего VirtualHost замените DocumentRoot и добавьте настройки каталога:

DocumentRoot /var/www/site1/public
<Directory /var/www/site1/public>
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
    DirectoryIndex index.html
</Directory>
AddDefaultCharset UTF-8

Процесс Apache должен читать файлы и проходить через родительские каталоги. Для обычных статических файлов достаточно режима 644, для каталогов – 755. Не выдавайте всей папке права 777: запись для всех пользователей не решает причину ошибки безопасным способом.

Проверка страницы и кодировки

Сохраните следующий текст как index.html внутри выбранного корня. На Linux создайте файл командой sudoedit /var/www/site1/public/index.html.

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>Проверка Apache</title>
</head>
<body>
    <h1>Сайт работает</h1>
</body>
</html>

Сам файл сохраните в UTF-8.

Директива AddDefaultCharset UTF-8 задает кодировку для соответствующих текстовых ответов, но не перекодирует содержимое файла. После проверки конфига примените изменения и откройте http://127.0.0.1/index.html. Вы должны увидеть русский текст «Сайт работает».

Настройка виртуальных хостов

Виртуальные хосты Apache позволяют обслуживать несколько сайтов на одном IP-адресе. Сервер выбирает сайт по имени из HTTP-запроса. Для примера используйте локальные имена site1.test и site2.test.

Два сайта на Ubuntu и Debian

Создайте второй каталог и тестовые страницы с разным содержимым:

sudo mkdir -p /var/www/site2/public
printf '%s\n' 'Site 1' | sudo tee /var/www/site1/public/index.html
printf '%s\n' 'Site 2' | sudo tee /var/www/site2/public/index.html
sudo chmod 755 /var/www/site1 /var/www/site1/public /var/www/site2 /var/www/site2/public
sudo chmod 644 /var/www/site1/public/index.html /var/www/site2/public/index.html

Откройте sudoedit /etc/apache2/sites-available/site1.conf и сохраните конфигурацию первого сайта:

<VirtualHost *:80>
    ServerName site1.test
    ServerAlias www.site1.test
    DocumentRoot /var/www/site1/public
    ErrorLog ${APACHE_LOG_DIR}/site1-error.log
    CustomLog ${APACHE_LOG_DIR}/site1-access.log combined

    <Directory /var/www/site1/public>
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
        DirectoryIndex index.html
    </Directory>
    AddDefaultCharset UTF-8
</VirtualHost>

Создайте /etc/apache2/sites-available/site2.conf с такой же структурой. Замените в нем каждое вхождение site1 на site2. Получатся отдельные имя, папка и журналы второго сайта.

Включите сайты и отключите стандартный хост. Reload выполняйте после успешной проверки:

sudo a2ensite site1.conf site2.conf
sudo a2dissite 000-default.conf
sudo apachectl configtest
sudo systemctl reload apache2
sudo apachectl -S

Последняя команда показывает разобранные виртуальные хосты и файлы их настроек. В выводе должны присутствовать оба имени. Если потребуется откат, отключите новые сайты через a2dissite, включите 000-default.conf через a2ensite и примените конфигурацию.

Два сайта на Windows

Создайте папки C:\www\site1\public и C:\www\site2\public. В каждую положите index.html с соответствующим названием сайта. Затем в httpd.conf включите строку, удалив начальный символ #:

Include conf/extra/httpd-vhosts.conf

Сохраните копию httpd-vhosts.conf и замените демонстрационные хосты следующими блоками:

<VirtualHost *:80>
    ServerName site1.test
    ServerAlias www.site1.test
    DocumentRoot "C:/www/site1/public"
    ErrorLog "logs/site1-error.log"
    CustomLog "logs/site1-access.log" combined
    <Directory "C:/www/site1/public">
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
        DirectoryIndex index.html
    </Directory>
    AddDefaultCharset UTF-8
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.test
    ServerAlias www.site2.test
    DocumentRoot "C:/www/site2/public"
    ErrorLog "logs/site2-error.log"
    CustomLog "logs/site2-access.log" combined
    <Directory "C:/www/site2/public">
        Options -Indexes +FollowSymLinks
        AllowOverride None
        Require all granted
        DirectoryIndex index.html
    </Directory>
    AddDefaultCharset UTF-8
</VirtualHost>

В командной строке администратора проверьте конфиг и перечитайте настройки службы. Если проверка вернула ошибку, исправьте ее перед restart:

cd /d C:\Apache24\bin
httpd.exe -t
httpd.exe -k restart -n "Apache24"
httpd.exe -S

Записи hosts для локальных имен

Редактируйте hosts на компьютере, где открыт браузер. В Windows файл находится по адресу C:\Windows\System32\drivers\etc\hosts. Запустите текстовый редактор с правами администратора и откройте этот файл. На Linux выполните sudoedit /etc/hosts.

127.0.0.1 site1.test www.site1.test
127.0.0.1 site2.test www.site2.test

Такие записи подходят, когда браузер и Apache работают на одной машине. Для удаленного Linux-сервера замените 127.0.0.1 его доступным IP-адресом. Запись hosts не публикует домен в интернете.

Откройте http://site1.test/ и http://site2.test/. Браузер должен показать разные страницы. Если оба адреса открывают первый сайт, проверьте ServerName и вывод httpd.exe -S либо sudo apachectl -S. Первый подходящий хост обслуживает также запросы с неизвестным именем.

Модули и .htaccess

Модуль mod_rewrite изменяет обработку адресов по правилам. Файл .htaccess задает правила для своего каталога и вложенных папок. Apache читает его только при разрешенном переопределении настроек.

На Windows найдите в httpd.conf строку загрузки rewrite_module. Удалите начальный #, если строка закомментирована:

LoadModule rewrite_module modules/mod_rewrite.so

На Ubuntu и Debian включите модуль командой:

sudo a2enmod rewrite

В блоке Directory выбранного сайта замените AllowOverride None на AllowOverride All. Оставьте Options -Indexes +FollowSymLinks и разрешение Require all granted. Не включайте AllowOverride All сразу для всей файловой системы.

Проверьте конфигурацию, затем перезапустите Apache. На Windows выполните httpd.exe -M из папки bin. На Linux выполните sudo apachectl -M. В списке должен появиться rewrite_module.

Создайте файл .htaccess в корне первого сайта рядом с index.html:

RewriteEngine On
RewriteRule ^check/?$ index.html [L]

На Windows сохраняйте точное имя .htaccess, без расширения .txt. На Linux для первого сайта используйте sudoedit /var/www/site1/public/.htaccess. Откройте http://site1.test/check: браузер должен показать содержимое index.html без смены адреса.

Если адрес возвращает 404, проверьте имя файла, AllowOverride и загрузку модуля. При ответе 500 откройте журнал ошибок сайта: причина часто связана с недопустимой директивой. Проверка configtest не заменяет обращение к странице, поскольку .htaccess читается во время запроса.

Для отката удалите тестовое правило или переименуйте .htaccess. На собственном сервере постоянные правила удобнее хранить в конфиге хоста. Допустимые ограничения переопределения описаны в документации AllowOverride.

HTTPS для сайта на Apache

На публичном Linux-сервере Certbot с плагином Apache получает бесплатный сертификат Let's Encrypt и настраивает HTTPS. Для этого нужен настоящий домен. Локальные имена site1.test и localhost для такого сертификата не подходят.

  1. Создайте в DNS домена A-запись с публичным IPv4-адресом сервера. Если используете AAAA-запись, она должна вести на работающий IPv6 этого же сервера. Уберите ошибочную AAAA-запись, иначе проверка домена может завершиться неудачей.
  2. Замените ServerName тестового хоста настоящим доменом. Удалите тестовый ServerAlias или замените его реальным поддоменом. Примените конфигурацию после configtest.
  3. Откройте HTTP-адрес домена с другого устройства. Браузер должен показать нужный сайт без записи hosts. Входящие подключения на порты 80 и 443 должны проходить через firewall и сетевые правила провайдера.
  4. Сохраните резервную копию конфигурации: sudo cp -a /etc/apache2 /etc/apache2.before-https.
  5. Установите Certbot через snap командами из примера. Этот способ рассчитан на сервер с systemd и поддержкой snapd.

Если Certbot уже установлен другим способом, не смешивайте установки. Для перехода с apt удалите пакет командой sudo apt remove certbot. Не удаляйте каталог /etc/letsencrypt: он хранит сертификаты и настройки продления.

sudo apt update
sudo apt install snapd
sudo systemctl enable --now snapd.socket
sudo snap wait system seed.loaded
sudo snap install --classic certbot
sudo certbot --version

Последняя команда должна вывести название Certbot и номер версии.

Если система отвечает certbot: command not found, создайте ссылку на установленную программу. Затем повторите проверку версии:

sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --version

Запустите Certbot с плагином Apache:

sudo certbot --apache

Укажите контактную почту и примите условия центра сертификации. Выберите настоящий домен из списка обнаруженных виртуальных хостов. Если мастер предлагает перенаправлять HTTP на HTTPS, включите перенаправление. Выбирайте дополнительное имя www только при настроенных DNS и хосте.

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

Пакет Certbot содержит запланированное задание автоматического продления сертификатов.

Запустите пробное продление:

sudo certbot renew --dry-run

Успешный dry-run подтверждает работу процедуры продления. Не добавляйте параллельное задание cron для той же установки. Если пробное продление завершилось ошибкой, устраните причину из вывода команды. Проверьте DNS домена, доступность порта 80 и журналы Apache.

При неудачной настройке восстановите измененные файлы из /etc/apache2.before-https, отключите созданный SSL-хост и выполните configtest перед reload. Сам сертификат удалять ради возврата HTTP не требуется.

Для обычной проверки статического сайта на локальной Windows-машине достаточно HTTP. HTTPS понадобится при проверке сертификатов, защищенных cookie и поведения приложения в защищенном соединении. Сертификат для публичного домена не превращает localhost в этот домен.

Ошибки при запуске Apache

Сначала отделите ошибку запуска от ошибки ответа сайта. Если браузер получает 403 или 500, сервер уже принимает запросы. Если соединение не устанавливается, проверьте службу, порт и firewall.

Порт 80 занят другим процессом

На Windows откройте командную строку администратора и выполните:

netstat -ano | findstr LISTENING | findstr ":80 "

Смотрите строки с локальным портом 80. Последняя колонка содержит PID процесса. Подставьте найденное число вместо 1234:

tasklist /FI "PID eq 1234"

Конфликт может создавать другой веб-сервер или IIS. Если порт обслуживает системный процесс, проверьте HTTP.sys и службы IIS:

netsh http show servicestate
sc query W3SVC

Не завершайте системный процесс принудительно. На машине без нужных IIS-сайтов можно остановить W3SVC командой sc stop W3SVC. Для возврата используйте sc start W3SVC. Остановка IIS прервет работу сайтов, которые он обслуживает.

Для параллельной работы перенесите локальный Apache на порт 8080. Замените Listen на Listen 127.0.0.1:8080, а все <VirtualHost *:80> – на <VirtualHost *:8080>. После проверки и перезапуска открывайте адрес с портом, например http://site1.test:8080/.

На Linux владельца порта показывает команда:

sudo ss -ltnp 'sport = :80'

Предупреждение AH00558 про ServerName

Apache сообщает, что не определил полное имя сервера. Само предупреждение обычно не мешает запуску. На локальной Windows-машине задайте в httpd.conf глобальную строку ServerName localhost, заменив прежнюю настройку ServerName.

На Linux создайте файл /etc/apache2/conf-available/servername.conf через sudoedit. Запишите туда ServerName localhost для локальной машины либо реальное имя сервера. Затем включите настройку:

sudo a2enconf servername
sudo apachectl configtest
sudo systemctl reload apache2

Отсутствует VCRUNTIME140.dll

Установите Visual C++ Redistributable, требуемый выбранной сборкой Apache Lounge. Проверьте соответствие разрядности runtime и сервера. Не скачивайте отдельную DLL с постороннего сайта: подмена библиотеки создает риск запуска чужого кода.

Синтаксическая ошибка в конфигурации

Запустите httpd.exe -t на Windows или sudo apachectl configtest на Linux. Apache укажет файл и строку проблемной директивы. Проверьте прямые кавычки, закрывающие блоки Directory и наличие подключенного модуля.

Если ошибка появилась после правки, восстановите резервную копию файла. Повторите проверку до ответа Syntax OK. Затем примените настройки.

Сайт отвечает 403 Forbidden

Проверьте совпадение DocumentRoot и пути в Directory. Убедитесь, что блок каталога содержит Require all granted. На Linux проверьте права чтения файлов и прохода через родительские каталоги.

Также убедитесь, что в корне есть index.html. При выключенном Indexes сервер не показывает список файлов. Отсутствие индексной страницы в этом случае может дать 403 даже при правильных разрешениях доступа.

Где смотреть журналы ошибок

В Windows-сборке основной журнал расположен в C:\Apache24\logs\error.log. У созданных хостов отдельные файлы site1-error.log и site2-error.log в той же папке. Их задает директива ErrorLog.

На Ubuntu и Debian посмотрите последние записи основного журнала:

sudo tail -n 50 /var/log/apache2/error.log
sudo journalctl -u apache2 -n 50 --no-pager

Для первого виртуального хоста используйте /var/log/apache2/site1-error.log. Откройте проблемный адрес повторно и сопоставьте время запроса с записью журнала. Так вы найдете причину конкретного ответа, исключив посторонние старые ошибки.

Что дальше

Работающий Apache уже раздает статические страницы. Для PHP-приложения подключите интерпретатор, например через PHP-FPM на Linux. База MySQL нужна только приложениям, которые ее используют. Настройку обработчиков описывает руководство по установке PHP.

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

Комментарии

Оставьте свой комментарий
K
Kristina

А если при http://localhost отдаёт белую страницу.. в чём может быть проблема?

B
BaNru

Возможно в папке сервера лежит пустой index.html

Д
Денис С.
➞ BaNru

Вряд-ли ведь даже при 100% пустом файле index.html Apache автоматом перебрасывает в defoult index.html в документации Apahe (About )

КА
Кот Адмирала Макарова

Переводу на русский язык Ваш ответ: "У тебя руки кривые. У нас все ништяк." Знаете, я просто скачал пакет по установке из другого места и, надо же, все установилось. Настоятельно рекомендую проверить комплект архива.

КА
Кот Адмирала Макарова

Ничего не понял с самого начала. Что качать по ссылке? Где исполняемый файл установки, скриншот которого Вы показываете в статье? Ваша ссылка верна вообще? Если да, то статья не обладает полной информацией по установке.

Р

Статья нормальная. Просто она рассчитана на тех у кого есть хотя бы минимальные знания по установке софта.Ссылки работают сам проверял.Хотя статью немного можно дополнить.