Apache срещу Nginx: Основните точки

Banko Stoyanov12.08.20152min0
Nginx-vs-Apache-1.png

Nginx срещу Apache

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

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

Бърз преглед


Нека имаме доста бързо въведение към всеки уеб сървър, заедно с общ преглед на функционалността и характеристиките му, за да помогнем по-добре да сравним и контрастиране всеки уеб сървър.

Какво е Apache?


Apache HTTP Server е най-широко използваното Web Server software в целия свят, обслужвайки около половината от сайтовете онлайн. Стартирайки още през 1995 г. и бързо нараствайки до доминиращ сървър за HTTP, той се превърна в предпочитания уеб сървър за сайтове големи и малки.

Apache е създаден от Робърт МакКуул през 1995 г. и е непрекъснато разработван, поддържан и обновяван от открита общност от разработчици под ръководството на Apache Software Foundation. Като е пуснат под лиценза Apache, Apache HTTP Server остава свободен за използване, разпространение и модификация.

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

Какво е Nginx?


Още през 1999 г. възниква проблемът с голям брой клиенти, свързващи се към един уеб сървър, което може да изчерпи всички налични ресурси. Това първоначално е наречено проблемът C10K, тъй като става въпрос за опит да се обработват 10 000 клиенти едновременно чрез връзка Gigabit Ethernet.

Макар днес сървърите да са много по-мощни отколкото преди десетилетия, потребителското търсене също се увеличило значително. Internet-ът днес е станал обичаен стока, почти като кислород. Устройствата също постоянно doubling or tripling в мощност и резолюция, което означава експоненциално нарастване на очакваното количество данни в типичен уебсайт. Хората вече не са доволни от обикновени HTML сайтове с таблици; те искат динамично съдържание, висока резолюция на фонни изображения, типография и видеа. С потребителите на интернет, които искат огромни потоци данни от различни сайтове, има два начина за справяне с нарастващото потребителско търсене:

1. Покупка на повече сървъри за да се справите с увеличения трафик
2. Превключване към събитийно-ориентиран I/O

Число 1 може да не е жизнеспособно, поради високите разходи особено за стартиращи фирми. Число 2 е причината за създаването на Nginx.

През 2002 г. Игор Сисоев започва разработката на Nginx, надявайки се да подобри текущата архитектура на уеб сървъра с ефективна система за управление на нишки. Традиционно нишково-базирани модели са имали по една нишка за всеки клиент, което води до пренатоварване когато твърде много клиенти се свързват едновременно. Това е мястото, където влизат моделите базирани на събития. Моделите на базата на събития използват по-динамична форма на разпределение на ресурсите, която позволява на други процеси да използват ресурси, докато не бъде получено известие или сигнал за стартиране или завършване на различен процес. Това помага на сървърите да консумират по-малко памет и CPU нишки.

Сървърни архитектури


Едно от най-големите различия между Apache и Nginx произтича от архитектурите им. За кратко, Apache има архитектура управляемa от процеси, докато Nginx има архитектура управляемa от събития, но нека да погледнем по-внимателно и да видим как техните конкретни архитектури ги правят или ги развалят.

Apache


Понеже Apache е управляем от процеси, той ще създаде нов процес за всяка нова заявка. Това може да доведе до разхищение на памет особено при голям потребителски трафик. За щастие, заедно с огромен брой налични модули, които могат да бъдат компилирани статично или зареждани динамично по време на изпълнение, Apache прави стъпка напред в персонализируемостта като има специален модул наречен Multi-Processing Modules (MPMs). MPMs, различни от редовните модули, могат да достъпят операционната система без използване на APR библиотеки. MPMs са способни да реализират различни архитектури на системно ниво, позволявайки фино настройване на сървъра за конкретна инфраструктура.
Кажете, че Apache в миналото не е могъл да мултизадачи, това се променя едва след създаването на MPM, когато Apache успява да достигне скоростта на Nginx. Когато Apache 2.2 серията е открита да доставя статични страници значително по-бавно в сравнение с Nginx, се появи Event MPM, използващ няколко нишки и процеси на процес с асинхронен събитийно-цикличен модел.
За съжаление, дори с Event MPM, Apache все още се забавя значително при тежък потребителски трафик. Защото по-тежкият трафик означава допълнителни връзки, според архитектурата на Apache, нови процеси и нишки ще бъдат стартирани и по този начин се консумира повече памет. Когато системата изчерпи паметта, сървърът започва да използва твърдия диск като swap, което води до рязък спад в производителността. Накрая Apache достига определен лимит на процеси, както е определено от системния администратор, и спира нови връзки.

Nginx


Както споменахме, Nginx е решението на проблема C10K, който Apache все още среща. За разлика от Apache, Nginx не създава нови процеси за всяка заявка. Вместо това администраторът решава колко работни процеси трябва да се създадат за основния Nginx процес. Всяки работен процес е еднонишков и може да обработва повече от няколкa хиляди едновременни връзки.
Nginx е неблокиращ, събитийно-ориентиран и асинхронен. Неблокиращото означава, че той няма да спира дисковия IO дори когато CPU е зает. Събитийно-ориентирано означава, че потокът на програмата ще зависи от действията на потребителя, като кликване или превъртане през уебсайта. Асинхронно означава, че може да обработва повече от една заявка едновременно.

Обработка на статично и динамично съдържание


Начинът, по който Apache и Nginx обработват статичното и динамично съдържание, е учудващо различен, което означава, че ще трябва да решите дали сайтът ви ще бъде доминиращо статичен, динамичен или смес от двете, за да определите най-добрия уеб сървър за вашия сайт.

Apache


Тъй като Apache създава нов процес за всяка заявка, той използва доста памет при обслужване на статични страници и е доста бавен в това. Apache може да обслужва и динамично съдържание, просто като прикача(processor) процесор за конкретен език в инстанциите на работниците си. Това позволява безпроблемно изпълнение на динамично съдържание в самия уеб сървър без нужда от външни компоненти.
Apache улеснява обработката на динамично съдържание, тъй като няма нужда да се купува и инсталира допълнителен софтуер; модулите могат да се зареждат и изключват динамично според необходимостта.

Nginx


Nginx използва изключително малко памет при обслужване на статични страници. Също така обслужва статични страници значително по-бързо в сравнение с Apache. За съжаление, тъй като е сравнително нов уеб сървър софтуер, Nginx не може нативно да обработва динамично съдържание към момента. Заявките за динамично съдържание трябва да се предават на външен процесор. Това означава, че Nginx ще трябва да комуникира с HTTP, FastCGI или други протоколи, които поддържа. Още повече усложнение е, че за всяко повикване към процесора се използва допълнително връзка. Ползите от липсата на нативна поддръжка за динамично съдържание обаче са, че overhead-ът от динамичния интерпретатор е наличен само при обслужване на динамично съдържание. Обслужването на статично съдържание не изисква никаква връзка с интерпретатора.

Поддръжка


Документацията, съвместимостта и поддръжката от общността често идват с зрялост. Apache, като най-популярният, естествено има по-обширна документация, съвместимост и поддръжка. Въпреки това това не означава, че Nginx има недостатъчна поддръжка. Всъщност, заради експоненциалното си нарастване на потребителите, документацията бързо се допълва, като все повече трети страни добавят поддръжка.

Защо не и двете?


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

Заключение


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

Banko Stoyanov

This blogpost is written by Banko Stoyanov. Stoyanov is a Marketing manager at CooliceHost. Stoyanov holds an MBA in Marketing strategy and Business developing. He's passionate about data analysis, consumer behavior, cloud technology, and marketing. He is a lifelong learner who regularly keeps himself updated with the latest technologies and industry advancements. In his free time, he explores coffee scene and stays active through running and fitness. Find him on Linkedin and Facebook.


Оставете отговор

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са маркирани с *


Copyright © 2026 – CooliceHost.com – Всички права запазени.