Руководство по установке и настройке Apache HTTP Server

Apache HTTP Server — один из самых популярных веб-серверов в мире, разработкой которого занимается Apache Software Foundation. Он отличается надёжностью, гибкостью и модульной архитектурой, что позволяет настраивать его под любые задачи — от простого хостинга личного блога до высоконагруженных корпоративных проектов.

В этой статье мы подробно разберём установку Apache на различных операционных системах, базовую настройку конфигурационных файлов, создание виртуальных хостов, работу с .htaccess и многое другое с наглядными примерами.

1. Установка Apache

Способ установки зависит от вашей операционной системы. Рассмотрим основные варианты.

1.1 Установка на Ubuntu / Debian

В дистрибутивах на основе Debian пакет Apache называется apache2.

Bash
# Обновление списка пакетов
sudo apt update

# Установка Apache
sudo apt install apache2

# Автоматический запуск при загрузке системы
sudo systemctl enable apache2

# Запуск сервера
sudo systemctl start apache2

После установки откройте в браузере http://localhost — вы должны увидеть стандартную страницу приветствия Apache с надписью «It Works!».

Важно: Если порт 80 уже занят другим сервером, измените порт в файле конфигурации (об этом ниже).

1.2 Установка на CentOS / RHEL / Rocky Linux

В этих дистрибутивах пакет называется httpd.

Bash
# Установка Apache (и PHP, если требуется)
sudo dnf install httpd php

# Автоматический запуск при загрузке
sudo systemctl enable httpd

# Запуск сервера
sudo systemctl start httpd

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

Для Windows Apache распространяется в виде бинарных установщиков (файлы .msi):

  1. Скачайте последнюю версию с официального сайта Apache.
  2. Запустите установщик и следуйте инструкциям мастера установки.
  3. По умолчанию Apache устанавливается на порт 80.
  4. Для запуска из командной строки перейдите в папку bin и выполните: httpd.exe или установите Apache как системную службу.

1.4 Установка из исходных кодов

Если вам нужна максимальная гибкость или специфическая конфигурация сборки:

Bash
# Скачивание дистрибутива (замените NN на версию, например 2.4.57)
gzip -d httpd-NN.tar.gz
tar xvf httpd-NN.tar
cd httpd-NN

# Конфигурация с указанием пути установки
./configure --prefix=/usr/local/apache2

# Сборка и установка
make
make install

# Запуск
/usr/local/apache2/bin/apachectl -k start
# Скачивание (замените NN на версию)
wget https://downloads.apache.org/httpd/httpd-NN.tar.gz

Подробные инструкции по установке из исходных кодов доступны в официальной документации Apache.

2. Структура конфигурационных файлов

Apache настраивается с помощью директив, размещаемых в текстовых конфигурационных файлах. Основные файлы и директории:

СистемаГлавный конфигурационный файлДополнительные директивы
Ubuntu/Debian/etc/apache2/apache2.conf/etc/apache2/sites-available//etc/apache2/conf-available/
CentOS/RHEL/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/
Arch Linux/etc/httpd/conf/httpd.confвключаемые файлы в conf/extra/

Главный конфигурационный файл обычно называется httpd.conf. Его расположение задаётся при компиляции, но может быть переопределено флагом -f командной строки.

Синтаксис конфигурационных файлов:

  • Одна директива на строку
  • Для переноса строки используется обратный слеш \ в конце строки
  • Директивы регистронезависимы, но аргументы часто чувствительны к регистру
  • Строки, начинающиеся с #, являются комментариями
  • Пустые строки и пробелы в начале строки игнорируются

Проверка синтаксиса

Перед перезапуском сервера всегда проверяйте конфигурацию на ошибки:

Bash
apachectl configtest
# или
httpd -t

Если синтаксис корректен, вы увидите: Syntax OK. Это спасёт вас от случайного падения сервера из-за опечаток.

3. Основные директивы httpd.conf

Разберём ключевые директивы, которые вы найдёте в главном конфигурационном файле.

3.1 Базовые настройки сервера

Apache
# Корневая директория сервера (содержит конфигурацию, модули, логи)
# CentOS / RHEL
ServerRoot "/etc/httpd"

# Ubuntu / Debian
ServerRoot "/etc/apache2"

# Таймаут ожидания ответа от клиента (в секундах)
Timeout 60

# Адрес электронной почты администратора
ServerAdmin admin@example.com

3.2 Порт и привязка

Директива Listen определяет, на каких портах и интерфейсах Apache ожидает соединения:

Apache
# Слушать все интерфейсы на порту 80
Listen 80

# Слушать только локальный интерфейс (для разработки)
Listen 127.0.0.1:80

# Слушать порт 8080 на всех интерфейсах
Listen 8080

# Несколько портов
Listen 80
Listen 443

3.3 Корневая директория документов

DocumentRoot — папка, откуда Apache будет отдавать файлы сайта:

Apache
DocumentRoot "/var/www/html"

# ВНИМАНИЕ: при изменении DocumentRoot
# необходимо также изменить соответствующую секцию <Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Если забыть изменить секцию <Directory>, вы получите ошибку 403 (доступ запрещён).

3.4 Управление подключениями

Apache
# Включение постоянных соединений (Keep-Alive)
KeepAlive On

# Максимальное количество запросов в одном соединении
MaxKeepAliveRequests 100

# Время ожидания следующего запроса в постоянном соединении
KeepAliveTimeout 5

3.5 Настройки производительности (MPM — Multi-Processing Module)

Apache может работать в различных режимах обработки запросов. Настройки зависят от выбранного MPM-модуля (prefork, worker, event).

Пример для MPM Prefork (используется по умолчанию во многих сборках):

Apache
<IfModule mpm_prefork_module>
    StartServers        5      # Количество дочерних процессов при старте
    MinSpareServers     5      # Минимальное количество свободных процессов
    MaxSpareServers     10     # Максимальное количество свободных процессов
    MaxRequestWorkers   150    # Максимальное количество одновременно работающих процессов
    MaxConnectionsPerChild 10000  # Лимит запросов на один процесс (для защиты от утечек)
</IfModule>

Prefork часто используется с mod_php. На современных системах (Ubuntu 18.04+) по умолчанию ставится MPM Event — он эффективнее, но требует PHP-FPM вместо mod_php.

4. Виртуальные хосты (Virtual Hosts)

Виртуальные хосты позволяют размещать несколько сайтов на одном сервере. Различают два типа:

  • Name-based — несколько доменов на одном IP-адресе
  • IP-based — разные IP-адреса для разных сайтов

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

Шаг 1: Создайте директории для сайтов:

Bash
# Создание папок для сайтов
mkdir -p /var/www/site1.com/public_html
mkdir -p /var/www/site2.com/public_html

# Создание тестовых страниц
echo "<h1>Site 1</h1>" > /var/www/site1.com/public_html/index.html
echo "<h1>Site 2</h1>" > /var/www/site2.com/public_html/index.html

Шаг 2: Добавьте виртуальные хосты в конфигурацию (в конец httpd.conf или в отдельный файл):

Apache
# Первый сайт
<VirtualHost *:80>
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/public_html
    <Directory /var/www/site1.com/public_html>
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog /var/log/apache/site1-error.log
    CustomLog /var/log/apache/site1-access.log combined
</VirtualHost>

# Второй сайт
<VirtualHost *:80>
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/site2.com/public_html
    <Directory /var/www/site2.com/public_html>
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog /var/log/apache/site2-error.log
    CustomLog /var/log/apache/site2-access.log combined
</VirtualHost>

4.2 Организация sites-available / sites-enabled (рекомендуемый подход)

Этот подход, популярный в Debian/Ubuntu, упрощает управление множеством сайтов:

Bash
# Создание директорий
mkdir -p /etc/httpd/sites-available
mkdir -p /etc/httpd/sites-enabled

# Добавление в httpd.conf в самом конце:
IncludeOptional /etc/httpd/sites-enabled/*.conf

Теперь каждый сайт получает отдельный файл в sites-available/, а активация происходит через символическую ссылку в sites-enabled/:

Bash
# Создание конфигурации сайта
nano /etc/httpd/sites-available/site1.conf

# Активация сайта (создание симлинка)
ln -s /etc/httpd/sites-available/site1.conf /etc/httpd/sites-enabled/

# Деактивация сайта
rm /etc/httpd/sites-enabled/site1.conf

Почему это удобно? Если конфигурация одного сайта содержит ошибку, при перезапуске Apache не запустится ни один сайт. Схема sites-available/sites-enabled позволяет временно отключать проблемные сайты, удаляя симлинк.

4.3 Виртуальный хост по умолчанию

Apache
<VirtualHost _default_:*>
    DocumentRoot /var/www/default
    <Directory /var/www/default>
        Require all granted
    </Directory>
</VirtualHost>

5. Работа с .htaccess

.htaccess — это распределённый конфигурационный файл, который позволяет изменять настройки на уровне отдельных директорий без редактирования основного конфига.

5.1 Включение .htaccess

По умолчанию .htaccess отключён из соображений безопасности и производительности. Чтобы включить его, в секции <Directory> для нужной папки укажите:

Apache
<Directory "/var/www/html">
    AllowOverride All   # Разрешить все директивы из .htaccess
    # или более точечно:
    # AllowOverride FileInfo AuthConfig Limit
</Directory>

Значения AllowOverride:

ЗначениеЧто разрешает
NoneПолностью игнорировать .htaccess (по умолчанию)
AllРазрешить все директивы
FileInfoДирективы для управления документами (например, AddType)
AuthConfigДирективы авторизации (например, AuthTypeRequire)
LimitДирективы ограничения доступа (например, AllowDeny)

5.2 Примеры .htaccess

Редиректы:

Apache
<IfModule mod_alias.c>
    # Постоянный редирект 301
    Redirect permanent /old-page.html /new-page.html
    
    # Временный редирект 302
    Redirect temp /special-offer /new-offer
    
    # Редирект на внешний сайт
    Redirect "/service" "http://foo2.example.com/service"
    
    # Редирект 301 с регулярным выражением
    RedirectMatch 301 "^/oldfile\.html/?$" "http://example.com/newfile.php"
</IfModule>

Перенаправление с www на без www и наоборот:

Apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # Перенаправление с example.com на www.example.com
    RewriteCond %{HTTP_HOST} ^example\.com [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
    
    # Или наоборот: с www на без www
    # RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
    # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
</IfModule>

Перенаправление HTTP → HTTPS:

Apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

CORS (Cross-Origin Resource Sharing):

Apache
<IfModule mod_headers.c>
    # Разрешить доступ с любых сайтов
    Header set Access-Control-Allow-Origin "*"
    
    # Или только с конкретного домена
    # Header set Access-Control-Allow-Origin "https://example.com"
</IfModule>

Блокировка доступа по IP:

Apache
<RequireAll>
    Require all granted
    Require not ip 192.168.1.100
    Require not ip 10.0.0.0/8
</RequireAll>

ЧПУ (человеко-понятные URL) для PHP:

Apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    
    # Пример: /article/123 → article.php?id=123
    RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L]
    
    # Пример: /product/123/phone → product.php?id=123&name=phone
    RewriteRule ^product/([0-9]+)/([a-z-]+)$ product.php?id=$1&name=$2 [L]
</IfModule>

5.3 Когда НЕ стоит использовать .htaccess

Использование .htaccess снижает производительность, так как Apache проверяет эти файлы при каждом запросе в каждой директории. Если у вас есть доступ к основному конфигурационному файлу сервера (httpd.conf), предпочтительнее размещать директивы в секциях <Directory> — они обрабатываются один раз при запуске сервера.

Если вы часто настраиваете редиректы и ЧПУ, вручную прописывать правила в .htaccess или конфигах бывает долго и легко допустить опечатку. В нашем конструкторе правил для Apache можно собрать типовые сценарии (редиректы, ЧПУ, CORS, блокировку IP) в пару кликов и получить готовый блок кода для вставки в конфиг или .htaccess.

6. Модули Apache

Apache — модульный сервер. Базовая функциональность встроена в ядро, а расширенные возможности подключаются через модули.

6.1 Подключение модулей

Apache
# Загрузка модуля mod_rewrite (для ЧПУ и редиректов)
LoadModule rewrite_module modules/mod_rewrite.so

# Загрузка модуля mod_headers (для управления HTTP-заголовками)
LoadModule headers_module modules/mod_headers.so

# Загрузка модуля mod_ssl (для HTTPS)
LoadModule ssl_module modules/mod_ssl.so

На Ubuntu/Debian для этого есть штатные команды:

Bash
# Включение модуля
sudo a2enmod rewrite
sudo a2enmod ssl

# Выключение
sudo a2dismod rewrite

# Включение / выключение сайта
sudo a2ensite site1.conf
sudo a2dissite site1.conf

# Включение / выключение конфига
sudo a2enconf security
sudo a2disconf security

6.2 Основные модули

МодульНазначение
mod_rewriteУправление URL, ЧПУ, редиректы
mod_sslПоддержка HTTPS (SSL/TLS)
mod_headersУправление HTTP-заголовками, CORS
mod_aliasРедиректы и псевдонимы
mod_phpОбработка PHP (или PHP-FPM)
mod_proxyПрокси-сервер, балансировка нагрузки

6.3 Условное выполнение директив

Используйте <IfModule> для безопасного включения директив, которые зависят от наличия модуля:

Apache
<IfModule mod_rewrite.c>
    RewriteEngine On
    # ... правила перезаписи ...
</IfModule>

<IfModule mod_headers.c>
    Header set X-Frame-Options "DENY"
</IfModule>

7. Настройка HTTPS (SSL/TLS)

7.1 Создание самоподписанного сертификата

Bash
# Создание директории для сертификатов
sudo mkdir -p /etc/apache2/ssl

# Генерация сертификата (замените SERVER_FQDN на ваше доменное имя)
sudo openssl req -x509 -nodes \
    -addext "subjectAltName=DNS:SERVER_FQDN,DNS:www.SERVER_FQDN" \
    -days 730 \
    -newkey rsa:2048 \
    -keyout /etc/apache2/ssl/SSL.key \
    -out /etc/apache2/ssl/SSL.crt

Флаг -addext доступен в OpenSSL 1.1.1+. На старых системах используйте конфиг-файл с subjectAltName.

7.2 Настройка виртуального хоста для HTTPS

Apache
<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/example.com/public_html
    
    # Включение SSL
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/SSL.crt
    SSLCertificateKeyFile /etc/apache2/ssl/SSL.key
    
    ErrorLog /var/log/apache/example-error.log
    CustomLog /var/log/apache/example-access.log combined
</VirtualHost>

7.3 Перенаправление HTTP → HTTPS

Apache
<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / https://example.com/
</VirtualHost>

8. Управление сервисом

8.1 systemd (Ubuntu/Debian/CentOS 7+)

Bash
# Запуск
sudo systemctl start apache2   # Ubuntu
sudo systemctl start httpd     # CentOS

# Остановка
sudo systemctl stop apache2

# Перезапуск (для применения изменений конфигурации)
sudo systemctl restart apache2

# Плавный перезапуск (без разрыва соединений)
sudo systemctl reload apache2

# Проверка статуса
sudo systemctl status apache2

# Автозапуск при загрузке
sudo systemctl enable apache2

8.2 Apache control (apachectl)

Bash
# Запуск
sudo apachectl start

# Остановка
sudo apachectl stop

# Перезапуск
sudo apachectl restart

# Плавный перезапуск
sudo apachectl graceful

# Проверка конфигурации
sudo apachectl configtest

9. Настройка фаервола

Не забудьте открыть порты в фаерволе:

Ubuntu (UFW):

Bash
sudo ufw allow 'Apache Full'   # HTTP (80) и HTTPS (443)

CentOS/RHEL (firewalld):

Bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

10. Безопасность

10.1 Скрытие информации о сервере

Apache
# В httpd.conf
ServerTokens Prod          # Минимум информации в заголовках
ServerSignature Off        # Отключить подпись на страницах ошибок

10.2 Защита конфиденциальных директорий

Apache
<Directory "/var/www/html/admin">
    Require all denied
    # или ограничить по IP:
    # Require ip 192.168.1.0/24
</Directory>

10.3 Защита от кликджекинга

Apache
<IfModule mod_headers.c>
    Header set X-Frame-Options "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"
</IfModule>

Такие заголовки, как X-Frame-Options и X-Content-Type-Options, удобно добавлять через конструктор правил: там есть готовые блоки под разные сценарии, которые можно сразу вставить в конфиг.

11. Заключение

Мы рассмотрели полный цикл работы с Apache HTTP Server: от установки до тонкой настройки. Ключевые моменты, которые стоит запомнить:

  1. Всегда проверяйте конфигурацию командой apachectl configtest перед перезапуском.
  2. Используйте виртуальные хосты для размещения нескольких сайтов.
  3. Применяйте схему sites-available/sites-enabled для удобного управления сайтами.
  4. По возможности избегайте .htaccess в пользу основного конфига — это быстрее.
  5. Не забывайте про безопасность: скрывайте версию сервера, настраивайте заголовки, ограничивайте доступ.

Освоив базовые настройки Apache, вы сможете гибко управлять сервером. А чтобы не держать в голове частые шаблоны (редиректы, заголовки, ограничения доступа), используйте конструктор правил — он поможет быстро собрать нужный блок конфигурации под вашу задачу.