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-установщика.
- На сайте Apache Lounge перейдите к загрузкам. Для 64-разрядной Windows выберите ZIP-архив Apache HTTP Server 2.4 Win64. Инструкция рассчитана на эту сборку.
- Установите Microsoft Visual C++ Redistributable, который указан в описании выбранной сборки или ее README. Разрядность runtime должна соответствовать Apache. Используйте официальную страницу загрузки Microsoft. При успешной установке программа завершится без сообщения об ошибке.
- Распакуйте папку Apache24 из архива в корень диска C. Убедитесь, что файл сервера находится по адресу
C:\Apache24\bin\httpd.exe. Вложенной папкиC:\Apache24\Apache24быть не должно. - Откройте
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 apache2Reload перечитывает настройки без обычной полной остановки службы. Если проверка обнаружила ошибку, не применяйте конфиг. Восстановите копию, повторите проверку и только затем перезагрузите настройки.
Как изменить корневую папку сайта
Директива 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 для такого сертификата не подходят.
- Создайте в DNS домена A-запись с публичным IPv4-адресом сервера. Если используете AAAA-запись, она должна вести на работающий IPv6 этого же сервера. Уберите ошибочную AAAA-запись, иначе проверка домена может завершиться неудачей.
- Замените ServerName тестового хоста настоящим доменом. Удалите тестовый ServerAlias или замените его реальным поддоменом. Примените конфигурацию после configtest.
- Откройте HTTP-адрес домена с другого устройства. Браузер должен показать нужный сайт без записи hosts. Входящие подключения на порты 80 и 443 должны проходить через firewall и сетевые правила провайдера.
- Сохраните резервную копию конфигурации:
sudo cp -a /etc/apache2 /etc/apache2.before-https. - Установите 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. Добавляйте по одному изменению и проверяйте страницу после каждого применения. Тогда при сбое вы будете знать, какая настройка его вызвала.
Популярное за неделю
- Как создать сайт самому в 2026: 4 способа + пошаговая инструкция 34 мин чтения
- Лучшие конструкторы для создания сайтов — плюсы, минусы и сравнения 22 мин чтения
- Error 522: что это за ошибка и как её исправить 14 мин чтения
- Ошибка 403 Forbidden NGINX: как найти причину и исправить 11 мин чтения
- Что такое ошибка доступа 403 и как ее исправить 10 мин чтения
- Ошибка 500 Internal Server Error: что значит и как исправить 7 мин чтения
Комментарии
А если при http://localhost отдаёт белую страницу.. в чём может быть проблема?
Возможно в папке сервера лежит пустой index.html
Вряд-ли ведь даже при 100% пустом файле index.html Apache автоматом перебрасывает в defoult index.html в документации Apahe (About )
Переводу на русский язык Ваш ответ: "У тебя руки кривые. У нас все ништяк." Знаете, я просто скачал пакет по установке из другого места и, надо же, все установилось. Настоятельно рекомендую проверить комплект архива.
Ничего не понял с самого начала. Что качать по ссылке? Где исполняемый файл установки, скриншот которого Вы показываете в статье? Ваша ссылка верна вообще? Если да, то статья не обладает полной информацией по установке.
Статья нормальная. Просто она рассчитана на тех у кого есть хотя бы минимальные знания по установке софта.Ссылки работают сам проверял.Хотя статью немного можно дополнить.