Apache та Nginx — це найпопулярніші веб-сервери, на яких сьогодні працює Інтернет. Разом вони обслуговують понад 50 % трафіку в Інтернеті. Однак останніми роками популярність Apache знижується на користь Nginx.
У загальному плані обидві платформи виконують одну й ту саму основну функцію: розміщують та надають веб-контент. Крім того, обидві мають унікальні можливості, що відповідають конкретним вимогам до обчислювальних потужностей, завдяки чому одна з них є більш придатною за іншу в різних сценаріях.
Для початку розглянемо переваги кожного з веб-серверів:
Зміст
Apache: багатофункціональний веб-сервер
Apache — це модульна веб-серверна програма, що працює на основі процесів і створює новий потік для кожного одночасного з’єднання. Вона підтримує низку функцій. Багато з них компілюються як окремі модулі та розширюють її базову функціональність.
Крім того, модулі Apache можуть надавати широкий спектр послуг — від підтримки мов програмування на стороні сервера до механізмів автентифікації.
Веб-сервер Apache — це модульна програма, в якій адміністратор може вибрати необхідну функціональність та встановити різні модулі відповідно до конкретних потреб.
Крім того, усі модулі можна компілювати як Динамічні Спільні Об’єкти (DSO), що існують окремо від основного файлу Apache. Підхід із використанням DSO настійно рекомендується, оскільки він спрощує додавання, видалення та оновлення модулів у конфігурації сервера.
Ще однією важливою особливістю архітектури Apache є «фільтри», які дозволяють модулям взаємодіяти з контентом, створеним іншими модулями. Ця взаємодія включає шифрування, сканування на віруси та стиснення статичного та динамічного контенту.
Отже, адміністратори часто обирають Apache за його гнучкість, потужність та широку підтримку.
Nginx: розроблений для високої продуктивності та масштабованості
Nginx був створений для вирішення проблеми, відомої як C10K, — обробки 10 000 одночасних підключень клієнтів. Він був розроблений спеціально для усунення обмежень продуктивності веб-серверів Apache.
NGINX — це високопродуктивний асинхронний веб-сервер. Він використовує архітектуру, керовану подіями, для обробки величезної кількості підключень. Зараз він популярніший за веб-сервер Apache з різних причин, про які ми поговоримо в цій статті.
Спочатку Nginx використовувався переважно для обслуговування статичних файлів, але з часом перетворився на повноцінний веб-сервер, який виконує весь спектр серверних завдань.
Сьогодні Nginx також використовується як зворотний проксі-сервер, балансувальник навантаження та HTTP-кеш. У деяких випадках Nginx також виконує функції веб-акселератора або SSL/TLS-термінатора.
Адміністратори часто обирають Nginx завдяки його ефективній роботі з ресурсами та швидкій реакції під навантаженням.
Apache проти Nginx: детальне порівняння
Архітектура
У порівнянні Apache та Nginx існує принципова відмінність в архітектурі обох веб-серверів, на яких вони працюють.
Перш за все, істотна відмінність між Apache та Nginx полягає в тому, як вони обробляють запити клієнтів. Apache використовує підхід, орієнтований на процеси, і створює новий потік для кожного запиту. На відміну від цього, Nginx використовує архітектуру, орієнтовану на події, для обробки декількох запитів в одному потоці.
У Apache один потік пов’язаний лише з одним з’єднанням, тоді як один потік у Nginx може обробляти кілька з’єднань.
Усі процеси поміщаються в цикл подій разом з іншими з’єднаннями та керуються асинхронно. Цей процес споживає менше пам’яті, що підвищує продуктивність.

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

Продуктивність: статичний / динамічний контент
Продуктивність веб-сервера зазвичай оцінюють за двома параметрами, а саме за його здатністю обробляти статичний та динамічний контент.
Статичні файли не потребують обробки, що дозволяє оцінити час відгуку сервера. Отже, наскільки швидко кожен сервер може доставляти невеликі статичні файли? Саме в цьому Nginx демонструє свої переваги при роботі зі статичним контентом, оскільки файли можна передавати клієнту безпосередньо та швидко.
За результатами тесту продуктивності, проведеного з використанням до 1000 одночасних підключень, Nginx працює в 2,5 рази швидше, ніж Apache. При цьому споживання оперативної пам’яті нижче. Крім того, Nginx використовував на 5–6% менше системної пам’яті для обробки навантаження. Ця різниця зумовлена переважно архітектурою сервера.
Що стосується відображення динамічного контенту, результати тесту показали, що продуктивність Apache та Nginx у цьому випадку була абсолютно однаковою.
Слід зазначити, що Nginx не має вбудованої можливості обробляти динамічний контент. Він не призначений для вбудованої обробки динамічного контенту.
Наприклад, Nginx має передавати запити на обробку PHP та іншого динамічного контенту зовнішньому процесору. Це може дещо ускладнити ситуацію, особливо при прогнозуванні кількості підключень, які потрібно дозволити.
На відміну від Nginx, Apache може обробляти динамічний контент, вбудовуючи процесор мови, такої як PHP, у кожну зі своїх робочих інстанцій. Це дозволяє йому виконувати динамічний контент у межах веб-сервера, не покладаючись на зовнішні компоненти.
Персоналізація
Apache підтримує динамічно завантажувані модулі, які можна використовувати за потреби. Сервер підтримує безліч різних модулів — як офіційних, так і сторонніх. Це робить Apache гнучкою платформою, яку користувачі можуть налаштовувати відповідно до своїх потреб.
Модулі можна використовувати для перезапису URL-адрес, автентифікації клієнтів, ведення журналів, кешування, зміцнення безпеки сервера, стиснення, шифрування та інших завдань. Динамічні модулі дозволяють значно розширити базову функціональність без значних додаткових зусиль.
Водночас модулі Nginx потрібно інтегрувати в ядро, і їх неможливо завантажувати динамічно. Щоб включити нестандартні модулі, користувачам доводиться компілювати сервер із вихідного коду.
Отже, відсутність цієї можливості у веб-сервера Nginx робить Apache більш гнучким у цьому плані.
Конфігурація
Окрім основного файлу конфігурації, Apache дозволяє здійснювати додаткове налаштування для окремих каталогів за допомогою файлів .htaccess. Зміни, внесені у файли .htaccess, одразу ж застосовуються в системі.
Ці файли містять усе: від правил перенаправлення до обмежень пам’яті та багато іншого, що дозволяє ефективно здійснювати децентралізоване налаштування веб-сервера. Крім того, така архітектура дає змогу користувачам без привілеїв керувати певними аспектами свого веб-сайту, не надаючи їм доступу до редагування основного файлу конфігурації.
Однак така гнучкість досягається за рахунок продуктивності. Кожного разу, коли файли .htaccess увімкнені, Apache має пройти все дерево каталогів від запитуваного URL-адреси або файлу через усі вищі рівні аж до кореневого каталогу сервера, а потім завантажувати їх для кожного запиту.
Nginx не дозволяє додаткового налаштування. Іншими словами, його конфігурація є централізованою. Ви маєте єдиний файл, який керує всім процесом, що робить його набагато швидшим у цьому плані, хоча й значно менш гнучким.
Централізована конфігурація Nginx менш гнучка, ніж концепція, яку використовує Apache. Проте вона має очевидну перевагу з точки зору безпеки: зміни в конфігурації веб-сервера можуть вносити лише користувачі, яким надано права суперкористувача.
Отже, оскільки в Nginx не існує конфігурації на рівні каталогів, користувачі виконують усі зміни конфігурації, записуючи директиви в головний файл конфігурації.
Підтримка
Apache та Nginx — це платформи з дуже добре розгорнутою документацією. Тому малоймовірно, що адміністратори зіткнуться з проблемою або матимуть питання, відповідь на яке не можна буде знайти в їхній документації.
Що стосується підтримки ОС, Apache працює на всіх операційних системах, таких як Linux і UNIX, а також повністю підтримує Microsoft Windows. Nginx також працює на декількох сучасних Unix-подібних системах і підтримує Windows, але його продуктивність на Windows не така стабільна, як на платформах UNIX.
Тому Apache є єдиним варіантом, готовим до експлуатації, якщо ви хочете запустити багатофункціональний веб-сервер з відкритим кодом на Microsoft Windows.
Сумісне використання Apache та Nginx
Однак, порівнюючи Apache та Nginx, слід пам’ятати, що вибір не завжди має бути виключно «або-або». Багато адміністраторів поєднують ці два сервери в гібридне рішення, яке дозволяє використовувати сильні сторони кожного з них.
Apache та Nginx можна використовувати паралельно для створення сервера, оптимізованого під навантаження. Ви можете використовувати Nginx перед Apache як серверний проксі, що дозволяє використовувати швидкість обробки Nginx та його здатність обробляти великі обсяги трафіку.
Nginx обробляє та передає статичний контент, перенаправляючи динамічний контент до Apache (як показано на зображенні нижче).

Nginx виконує важкі завдання, пов’язані з HTTP — передає статичні файли, кешує контент та розвантажує повільні HTTP-з’єднання, щоб сервер Apache міг виконувати код додатка в безпечному середовищі.
Висновок
У порівнянні Apache та Nginx вибір може виявитися складним, коли йдеться про зміну сервера або серверного програмного забезпечення. Визначення того, який сервер підходить вам найкраще, насамперед залежить від оцінки ваших конкретних вимог та вибору оптимального варіанту.
Apache та Nginx — це високопродуктивні веб-сервери з відкритим кодом, здатні обробляти різноманітні навантаження та задовольняти вимоги сучасних веб-сайтів.
Якщо вам не потрібно багато функцій веб-сервера, Nginx — це те, що вам потрібно. Крім того, за швидкістю та продуктивністю Nginx також є безперечним переможцем. Тому він чудово підходить для веб-сайтів з високим трафіком.
Nginx не може конкурувати з багатофункціональним Apache у багатьох аспектах, але його асинхронний статус та однопотокова блискавична архітектура роблять його розумним вибором порівняно з Apache.
З іншого боку, Apache може бути кращим веб-сервером в інших сценаріях. Наприклад, Apache краще підходить для середовищ спільного хостингу і може надавати панель управління, що спрощує внесення змін на стороні сервера.
Тому, перш ніж обирати між Apache та Nginx, вам потрібно ретельно проаналізувати свої вимоги, які повинен задовольняти ваш веб-сервер.
1 Comment
Yurii
Дуже гарно роз’яснено для навчальних цілей.
Так тримати, не зупинятися! Рухатися в перед!
Багато корисного матеріалу вже чекаємо на цій сторінці