15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
10.10.2024

Що таке Apache HTTP Server і що він робить для розробки веб-сайтів?

Apache HTTP Server — це програмне забезпечення веб-сервера з відкритим вихідним кодом, яке отримує HTTP/HTTPS запити від клієнтів (браузерів, споживачів API, краулерів) і повертає відповідну відповідь — відрендерену HTML-сторінку, бінарний файл, перенаправлення або код помилки. Підтримуваний Apache Software Foundation з 1995 року, він залишається одним із найпоширеніших веб-серверів в інтернеті, обслуговуючи все — від односторінкових особистих блогів до багаторівневих корпоративних застосунків.

В основі своєї архітектури Apache дотримується моделі обробки запитів на основі процесів/потоків, якою керують Multi-Processing Modules (MPM). Кожне вхідне з’єднання обробляється робочим процесом або потоком — це свідомий архітектурний вибір, що надає пріоритет стабільності та ізоляції над чистою конкурентністю, і є компромісом, який має суттєві наслідки при виборі веб-сервера для навантажень із великим трафіком.

Як Apache вписується у веб-стек

Apache не працює ізольовано. Він розташований між мережею та рівнем вашого застосунку, перетворюючи необроблені TCP-з’єднання на структуровані HTTP-транзакції. У типовому виробничому розгортанні він взаємодіє з:

  • Рушієм бази даних (MySQL, PostgreSQL, MariaDB) для збереження даних
  • Серверним середовищем виконання (PHP-FPM, Python WSGI, Ruby Rack, Node.js через проксі)
  • Рівнем завершення TLS (або обробляється нативно через mod_ssl, або передається зворотному проксі)
  • Планувальником процесів операційної системи, який виділяє час CPU для пулу робочих процесів Apache

Розуміння цих взаємозв’язків є необхідним перед налаштуванням Apache для чого-небудь, що виходить за рамки стандартної установки.

Основні технічні характеристики Apache

ВластивістьДеталі
Поточна стабільна гілкаApache 2.4.x
ЛіцензіяApache License 2.0
Підтримка платформLinux, FreeBSD, Windows, macOS, Solaris
Файл конфігурації за замовчуванням`/etc/apache2/apache2.conf` (Debian/Ubuntu), `/etc/httpd/conf/httpd.conf` (RHEL/CentOS)
Кореневий каталог документів за замовчуванням`/var/www/html`
Параметри MPM`prefork`, `worker`, `event`
Система модулівСтатичні (вбудовані) та динамічні (DSO через `mod_so`)

Multi-Processing Modules: архітектура, що визначає продуктивність

Це деталь, яку більшість вступних статей повністю опускає. Поведінка Apache при обробці запитів визначається тим, який MPM активний, і неправильний вибір може спричинити серйозну деградацію продуктивності під навантаженням.

prefork MPM

Кожен запит обробляється окремим однопотоковим дочірнім процесом. Потоки між запитами не спільні, що робить його єдиним безпечним MPM для бібліотек, що не підтримують потоки, — найкритичніше, для застарілого модуля mod_php (libphp).

  • Перевага: Ізоляція процесів означає, що збій в одному робочому процесі не впливає на інші.
  • Недолік: Високе споживання пам’яті при масштабуванні. Кожен простоюючий процес все одно займає RAM.
  • Коли використовувати: Застарілі PHP-застосунки, що використовують mod_php і не перенесені на PHP-FPM.

worker MPM

Гібридна модель: кілька дочірніх процесів, кожен з яких породжує кілька потоків. Один потік обробляє одне з’єднання.

  • Перевага: Значно менший обсяг використання пам’яті порівняно з prefork при еквівалентній конкурентності.
  • Недолік: Усі модулі, завантажені в процес, повинні підтримувати потоки.

event MPM

Сучасний стандарт з Apache 2.4. Він розширює worker, делегуючи управління keep-alive з’єднаннями виділеному потоку-слухачу, звільняючи робочі потоки для обробки активних запитів замість очікування на неактивних постійних з’єднаннях.

  • Перевага: Найкраще співвідношення конкурентності до ресурсів серед MPM Apache. Ефективно обробляє тисячі одночасних keep-alive з’єднань.
  • Недолік: Вимагає обслуговування PHP через PHP-FPM (FastCGI), а не mod_php.
  • Коли використовувати: Будь-який сучасний PHP-стек, Python WSGI або конфігурація зворотного проксі.

Щоб перевірити активний MPM на запущеному сервері:

apache2ctl -V | grep -i mpm

Щоб перейти на event MPM на Debian/Ubuntu:

sudo a2dismod php8.2
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.2-fpm
sudo systemctl restart apache2

Що Apache робить для розробки веб-сайтів

Обслуговування статичного та динамічного контенту

Найфундаментальніша роль Apache — це доставка контенту. Для статичних ресурсів — HTML, CSS, JavaScript-бандлів, зображень, шрифтів — Apache зчитує файл з диска і передає його безпосередньо клієнту. Для динамічного контенту він делегує виконання серверному середовищу та проксіює відповідь.

Шлях статичного контенту:

Browser → TCP connection → Apache → filesystem read → HTTP response

Шлях динамічного контенту (приклад PHP-FPM):

Browser → TCP connection → Apache → FastCGI socket → PHP-FPM worker → HTTP response

Ця відмінність важлива для стратегії кешування. Статичні файли можна агресивно кешувати на межі (CDN, кеш браузера) за допомогою заголовків Expires та Cache-Control, встановлених у конфігурації Apache. Динамічні відповіді вимагають логіки інвалідації кешу на рівні застосунку.

Завершення SSL/TLS за допомогою mod_ssl

Apache обробляє HTTPS нативно через mod_ssl, який обгортає OpenSSL. Мінімальна конфігурація TLS-віртуального хоста виглядає так:

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/example

    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/example.com/privkey.pem

    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder     off
    SSLSessionTickets       off

    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

Критичні точки посилення захисту, які часто пропускають:

  • Явно вимкніть TLS 1.0 та 1.1 — обидва застаріли згідно з RFC 8996 і не пройдуть перевірки відповідності PCI-DSS.
  • Встановіть SSLHonorCipherOrder off при використанні TLS 1.3, який керує узгодженням шифрів інакше, ніж TLS 1.2.
  • Додайте заголовки HSTS через mod_headers для запобігання атакам на зниження протоколу.

Якщо вам потрібен належним чином виданий сертифікат для вашого домену, SSL-сертифікати доступні як окрема послуга і безпосередньо інтегруються з конфігурацією mod_ssl Apache.

Перезапис URL та перенаправлення за допомогою mod_rewrite

mod_rewrite — один із найпотужніших і найчастіше неправильно налаштованих модулів Apache. Він використовує рушій на основі правил для перезапису вхідних URI запитів до того, як Apache зіставить їх з файлом або серверною частиною проксі.

Перенаправлення з HTTP на HTTPS виробничого рівня з попереднім завантаженням HSTS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Перезапис чистих URL для PHP-застосунку (наприклад, маршрутизація всіх запитів через index.php):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [QSA,L]

Поширена помилка: Розміщення правил перезапису у файлах .htaccess спричиняє накладні витрати на пошук у файловій системі при кожному запиті, оскільки Apache повинен перевіряти наявність .htaccess у кожному каталозі на шляху запиту. Для виробничих серверів, де важлива продуктивність, перенесіть правила до блоку <VirtualHost> в основній конфігурації та встановіть AllowOverride None, щоб повністю вимкнути обробку .htaccess.

Віртуальні хости для хостингу кількох сайтів

Система віртуальних хостів Apache дозволяє одному екземпляру сервера обслуговувати довільну кількість різних веб-сайтів. Це механізм, який робить спільний хостинг архітектурно можливим.

Іменний віртуальний хостинг (стандартний підхід — кілька доменів на одному IP):

<VirtualHost *:80>
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1
    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/site2
    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>

Apache вибирає правильний віртуальний хост, зіставляючи заголовок Host: в HTTP-запиті з директивами ServerName та ServerAlias. Якщо збіг не знайдено, Apache повертається до першого визначеного віртуального хоста — поведінка, яка може розкрити небажаний контент, якщо ваш віртуальний хост за замовчуванням явно не захищений.

Віртуальний хостинг на основі IP все ще використовується в середовищах, де TLS SNI недоступний (рідкість у сучасних розгортаннях), або там, де потрібна сувора ізоляція на мережевому рівні між орендарями.

Якщо ви запускаєте кілька клієнтських сайтів або проєктів з одного сервера, середовище VPS Хостингу надає вам повний контроль над конфігурацією віртуальних хостів Apache, вибором MPM та завантаженням модулів — можливості, які обмежені або недоступні на спільній інфраструктурі.

Журналювання, моніторинг та криміналістичний аналіз

Apache генерує два основні потоки журналів:

Журнал доступу — записує кожен завершений запит:

192.168.1.10 - frank [10/Oct/2024:13:55:36 -0700] "GET /index.html HTTP/1.1" 200 2326

Поля за замовчуванням відповідають Combined Log Format: IP клієнта, ident, авторизований користувач, мітка часу, рядок запиту, код статусу, розмір відповіді, реферер, user agent.

Журнал помилок — записує помилки рівня сервера, попередження модулів та діагностику запуску. Це перше місце, куди слід звертатися, коли Apache повертає помилку 500 або відмовляється запускатися.

Щоб одночасно відстежувати обидва журнали під час налагодження:

tail -f /var/log/apache2/access.log /var/log/apache2/error.log

Для виробничих середовищ розгляньте можливість передачі журналів до централізованої системи агрегації (ELK stack, Loki, Graylog), а не покладайтеся на локальну ротацію журналів. Apache підтримує журналювання через канали нативно:

CustomLog "|/usr/bin/logger -t apache -p local6.info" combined

Зворотний проксі та балансування навантаження

Можливість, яку оригінальна стаття повністю опускає: Apache може виступати як зворотний проксі, пересилаючи запити до серверних застосунків. Це стандартна архітектура для запуску застосунків Node.js, Python (Gunicorn/uWSGI) або Java (Tomcat) за Apache.

Увімкніть необхідні модулі:

sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests

Базовий зворотний проксі до застосунку Node.js на порту 3000:

<VirtualHost *:443>
    ServerName app.example.com

    ProxyPreserveHost On
    ProxyPass        / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>

Балансування навантаження між кількома серверними екземплярами:

<Proxy balancer://appcluster>
    BalancerMember http://127.0.0.1:3001 loadfactor=1
    BalancerMember http://127.0.0.1:3002 loadfactor=1
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass        / balancer://appcluster/
ProxyPassReverse / balancer://appcluster/

Для навантажень, які вимагають такої архітектури у масштабі — особливо застосунків із серверними частинами для GPU-прискореного інференсу — GPU Хостинг надає базову обчислювальну інфраструктуру, яку Apache може обслуговувати через свій модуль проксі.

Apache проти Nginx: пряме технічне порівняння

КритерійApacheNginx
АрхітектураНа основі процесів/потоків (MPM)Асинхронна, подієво-орієнтована
Область конфігураціїНа рівні каталогу через `.htaccess`Лише на рівні сервера (без конфігурації на рівні каталогу під час виконання)
Продуктивність статичних файлівХорошаВідмінна (дещо швидша при високій конкурентності)
Динамічний контентНативна інтеграція модулів (`mod_php`)Завжди через зовнішній FastCGI/uWSGI
Використання пам’яті (у стані спокою)Вище (prefork) / Помірне (event)Нижче
Екосистема модулівШирока, зрілаЗростаюча, але менша
Підтримка `.htaccess`Так (з витратами на продуктивність)Ні
Зворотний проксіТак (`mod_proxy`)Так (основна функція)
Крива навчанняПомірнаПомірна
Найкраще підходить дляСпільного хостингу, LAMP-стеків, застосунків, що залежать від `.htaccess`API з високою конкурентністю, обслуговування статичних ресурсів, мікросервіси

Жоден сервер не є універсально кращим. Правильний вибір залежить від профілю вашого навантаження, вимог вашого застосунку до конфігурації та операційної обізнаності вашої команди. Багато виробничих середовищ запускають обидва — Nginx як фронтальний зворотний проксі, що обробляє завершення TLS та статичні ресурси, з Apache, що обслуговує динамічний контент застосунку на непублічному порту.

Довідник ключових модулів Apache

МодульФункціяТиповий випадок використання
`mod_ssl`Шифрування TLS/SSLHTTPS для всіх віртуальних хостів
`mod_rewrite`Рушій перезапису URIЧисті URL, перенаправлення, маршрутизація
`mod_proxy`Зворотний проксі та шлюзСерверні частини Node.js, Python, Java
`mod_headers`Маніпуляція HTTP-заголовкамиЗаголовки HSTS, CORS, CSP
`mod_deflate`Стиснення Gzip/BrotliЗменшення розміру корисного навантаження відповіді
`mod_cache`Рівень HTTP-кешуванняЗменшення навантаження на серверну частину
`mod_security`Брандмауер веб-застосунківБлокування атак SQLi, XSS, RFI
`mod_evasive`Пом’якшення DoS/DDoSОбмеження швидкості для зловмисних клієнтів
`mod_status`Панель статусу сервераМоніторинг продуктивності в реальному часі

Посилення безпеки: що більшість посібників пропускає

Стандартна установка Apache розкриває інформацію, яка допомагає зловмисникам. Застосуйте ці кроки посилення захисту перед будь-яким виробничим розгортанням.

Придушіть розкриття версії в /etc/apache2/conf-available/security.conf:

ServerTokens Prod
ServerSignature Off

Вимкніть перегляд каталогів глобально:

<Directory /var/www/>
    Options -Indexes
</Directory>

Обмежте HTTP-методи лише тими, які використовує ваш застосунок:

<LimitExcept GET POST HEAD>
    deny from all
</LimitExcept>

Встановіть заголовки безпеки за допомогою mod_headers:

Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=()"

Захистіть сам файл .htaccess від обслуговування як документа:

<FilesMatch "^.ht">
    Require all denied
</FilesMatch>

Для середовищ, де вам потрібен повний root-доступ для реалізації цих конфігурацій без обмежень, Виділені сервери забезпечують ізоляцію та контроль, які спільні або керовані середовища не можуть запропонувати.

Коли використовувати Apache: матриця рішень

СценарійApache рекомендований?Причина
LAMP-стек із застарілим `mod_php`ТакMPM `prefork` забезпечує безпеку потоків
Сучасний PHP через PHP-FPMТакMPM `event` відповідає продуктивності Nginx
Обслуговування статичних файлів із високою конкурентністюУмовноNginx має незначну перевагу; Apache є достатнім
CMS, що залежить від `.htaccess` (WordPress, Drupal)ТакНативна підтримка; Nginx вимагає ручного перекладу
Мікросервіси / API-шлюзНіNginx або Caddy краще підходять архітектурно
Багатоорендний спільний хостингТакВіртуальні хости + конфігурація `.htaccess` для кожного орендаря
Зворотний проксі для Node.js/PythonТак`mod_proxy` є виробничого рівня
Середовища, що вимагають інтеграції WAFТак`mod_security` є зрілим і добре задокументованим

Практичний контрольний список ключових висновків

Перед розгортанням Apache у виробництві перевірте кожен із наступних пунктів:

  • Вибір MPM: Підтвердіть, що MPM event активний при використанні PHP-FPM; використовуйте prefork лише для застарілих налаштувань mod_php.
  • Конфігурація TLS: Вимкніть TLS 1.0/1.1; застосуйте мінімум TLS 1.2 із надійними наборами шифрів; додайте заголовки HSTS.
  • Область AllowOverride: Встановіть AllowOverride None глобально та вмикайте лише для каталогів, які дійсно потребують конфігурації на рівні каталогу.
  • Розкриття інформації: Встановіть ServerTokens Prod та ServerSignature Off перед будь-яким публічним розкриттям.
  • Перегляд каталогів: Підтвердіть, що Options -Indexes встановлено для всіх кореневих каталогів документів.
  • Маршрутизація журналів: Переконайтеся, що журнали доступу та помилок записуються та ротуються; розгляньте централізовану агрегацію для налаштувань із кількома серверами.
  • Аудит модулів: Запустіть apache2ctl -M та вимкніть будь-який завантажений модуль, який ваш застосунок не використовує — кожен завантажений модуль збільшує поверхню атаки та обсяг пам’яті.
  • Заголовки безпеки: Перевірте заголовки X-Frame-Options, X-Content-Type-Options та CSP за допомогою securityheaders.com після розгортання.
  • Стандартний віртуальний хост: Визначте явний стандартний віртуальний хост, який повертає 444 або статичну сторінку для обробки запитів із нерозпізнаними заголовками Host:.

Якщо ви починаєте новий проєкт і хочете попередньо налаштоване середовище Apache з панеллю керування, VPS з cPanel надає керований стек, де Apache, PHP та SSL налаштовані та підтримуються через графічний інтерфейс — зменшуючи операційні витрати на ручну конфігурацію.

FAQ

У чому різниця між Apache та веб-сервером?

Apache — це конкретна реалізація програмного забезпечення веб-сервера. «Веб-сервер» — це загальна концепція — будь-яке програмне забезпечення, яке прослуховує HTTP-запити та повертає відповіді. Apache HTTP Server — одна з кількох реалізацій цієї концепції, поряд із Nginx, Caddy та LiteSpeed.

Чи підтримує Apache HTTP/2?

Так. Підтримка HTTP/2 забезпечується mod_http2, доступним з Apache 2.4.17. На практиці він вимагає TLS (HTTPS), оскільки всі основні браузери реалізують HTTP/2 лише через TLS. Увімкніть його за допомогою Protocols h2 http/1.1 всередині блоку SSL-віртуального хоста.

Чому Apache використовує більше пам’яті, ніж Nginx?

При використанні MPM prefork Apache породжує окремий процес для кожного з’єднання, кожен з яких несе повний обсяг пам’яті бінарного файлу Apache плюс завантажені модулі. Nginx використовує асинхронний цикл подій, де один робочий процес обробляє тисячі з’єднань одночасно. Перехід Apache на MPM event з PHP-FPM значно скорочує цю різницю.

Чи можуть Apache та Nginx працювати на одному сервері?

Так, і це поширений виробничий шаблон. Nginx прослуховує порти 80 та 443, обробляє завершення TLS та доставку статичних ресурсів, потім проксіює динамічні запити до Apache, що працює на внутрішньому порту (зазвичай 8080). Це поєднує ефективність конкурентності Nginx із гнучкістю mod_rewrite Apache та інтеграцією mod_security.

Чи є .htaccess обов’язковим для роботи Apache?

Ні. .htaccess — це необов’язковий механізм перевизначення конфігурації на рівні каталогу. Він зручний для середовищ спільного хостингу, де користувачі не можуть змінювати основну конфігурацію сервера, але несе вимірювані витрати на продуктивність. На серверах, де ви контролюєте основний файл конфігурації, правильним підходом є консолідація всіх директив у блоки <VirtualHost> та вимкнення .htaccess за допомогою AllowOverride None.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати