Що краще nginx або apache 2016

Nginx і Apache - це два найпопулярніших веб-сервера з відкритим вихідним кодом, які використовуються для розміщення сайтів по всьому світу. Разом їх частка становить понад 50% всього трафіку в інтернеті. Обидві програми пропонують всі необхідні можливості, здатні нормально витримувати великі робочі навантаження і інтегруватися з іншими програмами щоб забезпечити повноцінний веб-стек.

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

Загальна інформація

Перш ніж ми перейдемо до більш детального порівнянні Apache vs Nginx давайте розглянемо загальні характеристики цих веб-серверів.

Apache

Веб-сервер Apache був розроблений Робертом Маккула в 1995 році під керівництвом Apache Software Foundation. З 1999 і до цього дня Apache - це проект Apache Software, і зараз це одна з найпопулярніших їх програм.

Починаючи з 1996 року Apache був найпопулярнішим веб-сервером на просторах інтернету. Через таку популярності веб-сервер має багато документації та комплексну підтримку з боку інших компаній.

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

Nginx

У 2002 році Ігор Сусо почав роботу над веб-сервером Nginx, він поставив перед собою мету вирішити проблему десяти тисяч підключень, якій були піддані всі відомі на той час веб-сервери. Справа в тому, що жоден з існуючих веб-серверів, не дозволяв обробляти 10 тисяч запитів одночасно. Перший публічний реліз відбувся в 2004 році і мета була досягнута, завдяки реалізації архітектури, заснованої на асинхронних події.

Через свою легковажності, низького споживання ресурсів і здатності масштабироваться на різному апаратному забезпеченні майже відразу ж Nginx завоював величезну популярність. Nginx показав себе дуже добре при обслуговуванні статичного контенту, а динамічні запити передавалися іншим програмам.

Nginx часто вибирається адміністраторами для ефективного використання ресурсів і роботи під великим навантаженням. Цей веб-сервер поєднує в собі основні можливості веб-сервера і функції проксі.

відмінності архітектури

Найбільша відмінність Apache і Nginx в тому, як вони обробляють з`єднання і трафік. Це впливає на те як вони справляються з різним навантаженням.

Apache

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

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

Кожен процес споживає оперативну пам`ять, тому MPM буде складно використовувати на слабкому обладнанні. Але він як і раніше може бути відмінним вибором при роботі з певними компонентами. Наприклад, php не підтримує потоки, тому це єдиний спосіб безпечної роботи з mod_php.

Відео: Nginx vs Apache Websrvers: Main Differences

mpm_worker - цей модуль створює процеси, які управляють декількома потоками. Кожен з потоків може обробляти одне з`єднання. Потоки набагато ефективніше ніж процеси, а це значить, що mpm_worker краще, ніж mpm-prefork. Потоків більше ніж процесів і нові з`єднання можуть взяти будь-який з вільних потоків, замість того щоб чекати звільнення процесу.

mpm_event - цей модуль схожий на mpm-worker, тільки оптимізований для роботи з keep-alive сполуками. При обробці в mpm-worker з`єднання буде тримати потік зайнятим незалежно від того активно воно чи ні. mpm_event дозволяє віддавати окремі потоки для keep-alive з`єднань, так щоб вони не заважали працювати іншим потокам.

Як бачите, Apache надає дуже гнучку архітектуру для вибору різних алгоритмів обробки з`єднань. Такий вибір з`явився з розвитком веб-сервера і зростаючої потреби в паралізації.

Nginx

Nginx з`явився на арені після того, як спливли всі проблеми паралелізму Apahce. Nginx був розроблений з нуля вже з огляду на ці помилки, він використовує асинхронний код без блокувань, а алгоритм обробки з`єднань заснований на подіях.

Відео: Налаштування VDS: PHP, Apache, Nginx і Node.js

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




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

генерація контенту

З точки зору використання в реальних сценаріях найбільш часто виконується порівняння Nginx або Apache при обробці динамічного і статичного контенту

Apache

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

Nginx

Nginx і не виконує жодних динамічний вміст. Для обробки PHP або інших динамічних запитів потрібно використовувати зовнішній інтерпретатор і чекати поки він поверне результат обробки.

Це означає, що потрібно налаштувати з`єднання між Nginx і одним з інтерпретаторів. Nginx підтримує такі протоколи FastCGI, SCGI, uWSGI, memcache. Це може трохи ускладнити ситуацію, особливо при спробі передбачити кількість з`єднань.

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

відмінності настройки

Для адміністраторів одним з найбільш значних відмінностей між Apache vs Nginx буде спосіб настройки та розміщення конфігураційних файлів.

Apache

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

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




Файли .htaccess мають кілька переваг. Вони виконуються кожен раз, коли будуть виявлені, а значить для їх оновлення не потрібно перезавантажувати сервер. Також з ними можуть працювати непривілейованих користувачі.

Nginx

Nginx не підтримує інтерпретацію .htaccess файлів або будь-який інший механізм настройки поза основним конфігураційного файлу. Такий варіант є менш гнучкий, але у нього є свої переваги.

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

Відмінності визначення шляхів

Веб-сервера по-різному інтерпретують запити до документів, це теж важлива відмінність Apache і Nginx.

Apache

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

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

Коли запит не відповідає файлу є кілька альтернатив, наприклад, директива Alias ​​може бути використана для вказівки альтернативного місця розташування. Директива дозволяє перетворити будь-який URL адреса на адресу файлової системи за допомогою регулярних виразів. Але все ж Apache більше розрахований на роботу з файлами.

Nginx

Nginx був створений як одночасно веб-сервер і проксі сервер. Через архітектури, необхідної для цих двох рішень він працює в першу чергу з URL, переходячи в файлову систему тільки коли це необхідно. Це можна побачити, коли ви будете працювати з файлом конфігурації Nginx, тут перетворення в файл відбувається тільки в самому кінці обробки.

Основні блоки - це server і location, перший вказує який хост запитується, а другий перевіряє відповідність частин URL по регулярному виразу.

Для статичних ресурсів всі запити в кінцевому підсумку повинні бути перетворені в ресурс файлової системи. Nginx вибирає блок Server і Location, який буде обробляти запит, а потім дає йому виконати необхідні перетворення.

Такий підхід дозволяє більш просто функціонувати в ролі веб-сервера і проксі одночасно. Вам потрібно лише вказати як реагувати на певні типи запитів.

модулі

Обидва півночі Nginx і Apache підтримують розширення можливостей через модулі, але реалізація дуже сильно відрізняється.

Apache

Система модулів Apache дозволяє динамічно завантажувати або вивантажувати модулі щоб задовольнити ваші потреби під час запуску сервера. Ядро Apache завжди включено, а модулі можуть бути включені або відключені.

Ця функція дуже часто використовується, є величезна кількість модулів. Вони можуть бути застосовані для зміни деяких функцій веб-сервера, наприклад, модуль mod-php дозволяє вбудувати php інтерпретатор в кожен потік. Модулі можуть додавати аутентифікацію, кешування, обмеження швидкості і навіть шифрування.

Nginx

У Nginx теж є модульна система, але вона дуже сильно відрізняється від Apache. Тут модулі не завантажуються динамічно, вони повинні бути обрані і скомпільовані до складу основної програми.

Для багатьох користувачів це робить Nginx не таким гнучким. Пакети, поширювані в офіційних репозиторіях, містять тільки самі часто використовувані модулі, але якщо вам потрібно щось екзотичне, доведеться перекомпілювати програму.

Але тут модулі теж дуже корисні, вони дозволяють сильно розширити функціональність програми. Вони безпечніші, так як довільні компоненти не можуть бути включені. Модулі Nginx дозволяє робити те ж що і в Apache: проксінг, обмеження швидкості, аутентифікацію, шифрування, потокова передача і багато іншого.

Підтримка і документація

На процес навчання дуже сильно впливає наявність гарної документації та підтримки інших користувачів.

Відео: Урок 3. Налаштування nginx як frontend до apache

Apache

Оскільки Apache має довшу історію розвитку, для нього існує велика кількість документації, як для основного сервера, так і для сторонніх рішень і сценаріїв. Також багато інструментів включають в себе інструменти для інтеграції в середу Apache. Також більше шансів, що адміністратори вже мали досвід роботи з Apache.

Nginx

Nginx теж має відмінну документацію і багато користувачів використовують його через поліпшеною продуктивності. Але в деяких областях ще не все так добре.

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

Використання Nginx і Apache

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

Відео: Apache vs NGINX vs IIS

Для динамічного вмісту, наприклад, PHP, Nginx виступає в якості проксі сервера і передає запит до Apache. Потім результат повертається клієнтові.

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

висновки

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

Між проектами існують величезні відмінності, які сильно впливають на продуктивність і можливості. Не існує універсального рішення і вам належить зробити вибір. Ми вибрали Nginx. А який веб-сервер краще на вашу думку? Напишіть ви коментарях!

Поділися в соціальних мережах:

Схожі
Налаштування logrotateНалаштування logrotate
Види вільних ліцензій поВиди вільних ліцензій по
Безпека php на серверіБезпека php на сервері
Помилка 403 forbidden nginx 1.4 6 ubuntuПомилка 403 forbidden nginx 1.4 6 ubuntu
Установка nginx ubuntu 16.04Установка nginx ubuntu 16.04
Openserver або denwer?Openserver або denwer?
Обговорюється закриття проекту apache openofficeОбговорюється закриття проекту apache openoffice
Як зробити свій сервер для сайтуЯк зробити свій сервер для сайту
Як налаштувати https-з`єднання?Як налаштувати https-з`єднання?
Установка lamp в centos 7Установка lamp в centos 7
» » Що краще nginx або apache 2016