Nginx

Кратко въведение

Nginx ("engine x") е HTTP уеб сървър с отворен код, който след първоначалния си успех се използва също и като обратен прокси сървър (reverse proxy), балансатор на натоварването (load balancer), TCP/UDP прокси сървър, пощенски прокси сървър и кеш за съдържание.

Първоначално е написан от Игор Сисоев, разпространява се под лиценза BSD с две клаузи (разрешителен лиценз с отворен код) и е публично пуснат през 2004 г. През 2011 г. е основана компания със същото име, която да предоставя поддръжка и NGINX Plus – платен софтуер.

Корпоративни дистрибуции, комерсиална поддръжка и обучение в момента се предлагат от F5 Inc., която придоби компанията през 2019 г.

Този сървър първоначално е разработен като решение на проблема C10k (проблемът с оптимизирането на компютърните мрежови стекове за обработка на голям брой едновременни връзки).

Как работи?

NGINX е управляван от събития (event-driven) и асинхронен. Обикновено той създава фиксиран брой работни процеси (worker processes), често равен на броя на процесорните ядра. Един-единствен работен процес обработва хиляди едновременни връзки едновременно, използвайки мултиплексиране (epoll/kqueue). Той не стартира нов процес за всяка нова задача или заявка.

  • Работните процеси приемат нови заявки от споделен сокет за слушане (shared listen socket) и изпълняват високоефективни цикли на изпълнение вътре във всеки работен процес, за да обработят хиляди заявки.
  • Споделеният сокет за слушане представлява функция, която позволява използването на опцията за сокет SO_REUSEPORT, достъпна в по-новите версии на много операционни системи, включително DragonFly BSD и Linux (версия на ядрото 3.9 и по-нови). Тази опция за сокет позволява на множество сокети да слушат на една и съща комбинация от IP адрес и порт. След това ядрото балансира входящите връзки между сокетите.
  • Главните процеси (Masters) четат и валидират конфигурации чрез създаване, свързване и затваряне на сокети. Те също така се занимават с управлението на стартирането, прекратяването и поддържането на броя на конфигурираните работни процеси.
  • Главният възел (master node) може също така да преконфигурира работния процес без прекъсване на услугата.
  • Прокси кешовете са специални процеси. Зареждачът на кеша (Cache Loader) и мениджърът на кеша (Cache Manager) са специални процеси, използвани за управление на прокси кеширането. Зареждачът на кеша проверява елементите в дисковия кеш и попълва базата данни в паметта на ядрото с метаданните на кеша. Той също така подготвя инстанциите на NGINX за работа с файловете, които вече са съхранени на диска в специално заделена структура. Мениджърът на кеша се справя с изтичането на валидността и инвалидирането на кеша.

Предимства

Едно от основните предимства на използването на NGINX е, че намалява времето за изчакване при зареждане на уебсайт. Няма нужда да се притеснявате от висока латентност на вашите уебсайтове, което следователно осигурява добро потребителско изживяване.

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

Освен това, той предлага мащабируемост и способност за обработка на едновременни заявки. Nginx също така позволява актуализации на място без време на престой (downtime).

Неговата гъвкавост е една от основните причини да е широко използван и предпочитан сред разработчиците. Най-често се използва като уеб сървър поради бързата си производителност и мащабируемост, но както вече бе споменато, може да се използва и като обратен прокси сървър (reverse proxy), като насочва заявките на клиента към съответния бекенд сървър.

Може да действа като балансатор на натоварването – може автоматично да разпределя натоварването на мрежовия трафик, след като сървърите от по-горно ниво (upstream servers) бъдат конфигурирани.

Друг случай на употреба е като API шлюз (API gateway) – това е полезно за маршрутизиране на заявки, удостоверяване и обработка на изключения.

Допълнително, може да се използва като защитна стена (firewall) за уеб приложения чрез филтриране на входящите и изходящите мрежови заявки към вашия сървър.

Може да действа като кеш, който да ви помогне да съхранявате данните си за бъдещи заявки, и може да предпазва от атаки за разпределен отказ на услуга (DDoS).

В допълнение към всичко това, той може да бъде внедрен в среда на K8s (Kubernetes).

Недостатъци

Както се очаква, всяка система има и своите недостатъци. Както поддръжката, така и настройката изискват експертни знания, така че отново тази система може да има по-стръмна крива на обучение за начинаещите.

Въпреки че самият NGINX е безплатен, съществува и платена версия, наречена Nginx Plus – цялостно решение за балансиране на натоварването, кеш за съдържание, уеб сървър, API шлюз и прокси за микроуслуги, което се предлага на определена цена.

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

Основни изводи

  • Nginx е HTTP уеб сървър с отворен код, който може да се използва като балансатор на натоварването, обратен прокси сървър, кеш за съдържание, пощенски прокси и инструмент за защитна стена. Той е изключително гъвкав.
  • Има архитектура от тип "главен-работен процес" (master-worker) и използва неблокиращи, асинхронни механизми, управлявани от събития.
  • Използва мултиплексиране, което означава, че един-единствен работен процес може да обработва хиляди едновременни задачи без блокиране.
  • Всеки работен процес е еднонишков процес, който приема нови заявки от споделен сокет за слушане.
  • Главните процеси (Masters) четат и валидират конфигурации чрез създаване, свързване и затваряне на сокети.
  • Прокси кешовете имат специални процеси - зареждач на кеша и мениджър на кеша. Зареждачът на кеша проверява елементите в дисковия кеш и попълва базата данни в паметта на ядрото с кеша от метаданни. Мениджърът на кеша управлява изтичането на валидността и инвалидирането на кеша.
  • Въпреки по-стръмната крива на обучение и оперативната сложност, както и случайните предизвикателства с производителността, NGINX остава широко признат и използван заради своята скорост, мащабируемост, гъвкавост и способност да се справя с огромен едновременен трафик.

Адрес

Улица Слънце 3, Велико Търново, България

Контакти

Въведете име
Въведете фамилия
Въведете имейл
Невалиден имейл
Въведете съобщение