SebWeo.com
Коли я починав свій шлях у веб-розробці, питання “який веб-сервер використовувати?” практично не стояло. Відповідь була одна — Apache. Цей проєкт з відкритим вихідним кодом, запущений ще у 1995 році, довгий час був беззаперечним лідером і, по суті, побудував значну частину того інтернету, який ми знаємо сьогодні. Хоча Nginx сьогодні перехопив пальму першості за швидкістю, Apache залишається надзвичайно популярним, надійним та гнучким рішенням.
У цій статті я хочу віддати належне цьому “патріарху” веб-серверів. Ми розберемося, як він працює, в чому його унікальні переваги (так, вони є!), де він все ще незамінний, і як його базово налаштувати.
На відміну від Nginx з його асинхронною моделлю, Apache традиційно використовує модель “процес або потік на з’єднання”. Те, як саме він керує цими процесами та потоками, визначається MPM (Multi-Processing Module) — модулем мультиобробки. Це серце Apache, яке можна змінювати залежно від потреб.
Найпоширеніші MPM:
mod_php, оскільки багато PHP-розширень не були потокобезпечними.Вибір MPM залежить від ваших завдань та операційної системи, але сьогодні для нових установок зазвичай рекомендується Event MPM.
Незважаючи на перевагу Nginx у швидкості обробки статики та великої кількості з’єднань, Apache має кілька козирів у рукаві:
.htaccess — Гнучкість на рівні папкиЦе, мабуть, найголовніша перевага Apache, особливо у світі віртуального хостингу. Файл .htaccess дозволяє вам змінювати конфігурацію сервера (правила перенаправлення, контроль доступу, налаштування PHP) на рівні окремої папки, не маючи доступу до головного конфігураційного файлу сервера.
.htaccess?Коли надходить запит, Apache перевіряє наявність файлу .htaccess у поточній папці та у всіх батьківських папках аж до кореня сайту. Якщо файл знайдено, Apache читає його та застосовує вказані директиви “на льоту”.
Це неймовірно зручно для користувачів віртуального хостингу, але має свою ціну: Apache змушений постійно шукати та читати ці файли при кожному запиті, що знижує продуктивність. Nginx не підтримує аналог .htaccess саме з міркувань швидкодії.
За десятиліття існування для Apache було створено неймовірну кількість модулів для вирішення найрізноманітніших завдань:
mod_rewrite: Потужний інструмент для переписування URL (основа “людинозрозумілих” URL у багатьох CMS).mod_php: Класичний спосіб інтеграції PHP (хоча сьогодні PHP-FPM є кращим вибором).mod_security: Популярний веб-фаєрвол (WAF).mod_ssl: Для роботи з HTTPS.Хоча Nginx теж має модулі, їхня екосистема значно менша, і часто додавання стороннього модуля вимагає перекомпіляції Nginx.
Конфігураційні файли Apache (зазвичай httpd.conf або apache2.conf та файли віртуальних хостів) мають дуже гнучкий синтаксис. Завдяки своїй довгій історії, Apache чудово сумісний практично з будь-яким ПЗ та операційною системою.
За роки існування накопичилася величезна база документації, форумів, статей та готових рішень для Apache. Знайти відповідь на будь-яке питання зазвичай не складає труднощів.
.htaccess на швидкість: Зручність .htaccess обертається додатковими перевірками файлової системи при кожному запиті.
mod_php)Давайте я покажу приклад простого віртуального хоста для Apache, який використовує класичний mod_php. Цей підхід зараз не є найпродуктивнішим (Nginx + PHP-FPM краще), але він досі часто зустрічається на віртуальних хостингах.
Файл конфігурації (наприклад, /etc/apache2/sites-available/my-site.conf):
<VirtualHost *:80>
# Ім'я сервера
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
# Коренева папка сайту
DocumentRoot /var/www/my-site/public
# Налаштування логів
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Налаштування для папки сайту
<Directory /var/www/my-site/public>
# Дозволяємо використання .htaccess
AllowOverride All
# Дозволяємо доступ
Require all granted
# Налаштування для PHP (якщо використовується mod_php)
# Наприклад, увімкнення відображення помилок для розробки
php_flag display_errors on
php_value error_reporting E_ALL
</Directory>
</VirtualHost>
# Конфігурація для HTTPS (порт 443) буде схожою,
# але з додаванням директив SSLEngine, SSLCertificateFile тощо.
# Про перехід на HTTPS я писав тут:
# https://sebweo.com/yak-perejti-z-http-na-https-prosta-instruktsiya-vstanovlennya-ssl/
Після створення конфігурації її потрібно увімкнути (sudo a2ensite my-site.conf) та перезавантажити Apache (sudo systemctl reload apache2).
Хоча Nginx вирвався вперед у гонці за максимальну продуктивність, Apache HTTP Server залишається потужним, гнучким та неймовірно стабільним рішенням. Його головні козирі — це простота налаштування через .htaccess (що робить його королем віртуального хостингу) та величезна екосистема модулів.
На мою думку, вибір між Nginx та Apache залежить від конкретного завдання. Для високопродуктивних сайтів з великою кількістю статики та одночасних з’єднань краще підійде Nginx. Але якщо вам потрібна максимальна гнучкість конфігурації на рівні користувача або специфічні модулі Apache, він все ще може бути чудовим вибором. А часто найкращим рішенням є їхня комбінація: Nginx як фронтенд, а Apache як бекенд.
Коли мова заходить про веб-сервери, два імені завжди на слуху: Apache та Nginx. Apache —…
У світі веб-розробки ми постійно стикаємося з проблемою: "А в мене на комп'ютері все працює!".…
На зорі моєї кар'єри веб-розробника все було відносно просто: встановив локальний сервер (пам'ятаєте Denwer?), поклав…
Якщо ви коли-небудь цікавилися, як прискорити свій сайт на WordPress, ви, напевно, чули про "кешування".…
Коли ми говоримо про веб-розробку, перше, що спадає на думку — це HTML та CSS.…
У світі SEO є фраза, яку повторюють так часто, що вона вже стала кліше: "Content…