nginx

nginx (engine x) — вільний веб-сервер і проксі-сервер. Є версії для сімейства Unix-подібних операційних систем (FreeBSD, GNU/Linux, Solaris, Mac OS X) та Microsoft Windows.

nginx
Тип Вебсервер, проксі-сервер
Автор(и) Ігор Сисоєв
Розробники NGINX, Inc.
Стабільний випуск 1.15.3 (28 серпня 2018 (2018-08-28))
Репозиторій https://hg.nginx.org/nginx, https://github.com/nginx/nginx
Нестабільний випуск 1.14.0 (17 квітня 2018 (2018-04-17))
Операційна система Linux, Unix, Windows, Mac OS X
Мова програмування C[1]
Ліцензія BSD
Вебсайт www.nginx.org

 nginx у Вікісховищі

Розробляється Ігорем Сисоєвим з 2002-го року для компанії Rambler і постійно вдосконалюється. Восени 2004 року вийшов перший публічно доступний реліз.

3 2011 року розробкою програми опікується заснована Ігорем Сисоєвим компанія Nginx Inc., яка розвиває вільну та комерційні версії продукту.[2][3]

11 березня 2019 року NGINX купує компанія F5 Networks за 670 мільйонів доларів.[4][5]

Основні функції

HTTP-сервер

  • обслуговування статичних запитів, індексних файлів, автоматичне створення списку файлів, кеш дескрипторів відкритих файлів
  • акселероване проксіювання з підтримкою кешування
  • акселерована підтримка FastCGI і memcached серверів, простий розподіл навантаження і відмовостійкість
  • модульність, фільтри, gzip, byte-ranges (докачка), chunked відповіді, HTTP-аутентифікація, SSI-фільтр
  • вкладені запити на одній сторінці виконуються паралельно
  • підтримка SSL
  • експериментальна підтримка вбудованого Perl
  • експериментальна підтримка HTTP/2

IMAP/POP3-проксі сервер

  • перенаправлення користувача на IMAP/POP3-бекенд з використання зовнішнього HTTP-сервера аутентифікації
  • проста аутентифікація (LOGIN, USER/PASS)
  • підтримка SSL і StartTLS

Популярність

Згідно з квітневим 2012 року звітом[6] компанії Netcraft nginx використовується на 12.76% всіх активних сайтів і на 10.09% з мільйона найвідвідуваніших сайтів у світі. За рік до того nginx використовувався на 8.68% всіх активних сайтів і 6.52% популярних сайтів. За рік nginx переступив десятивідсоткову межу і витіснив IIS на третє місце в рейтингу популярності активних сайтів. Звіт налічує близько 23.4 млн хостів під управлінням nginx.

За даними W3Techs[7] на квітень 2012 11% з мільйона найвідвідуваніших сайтів у світі використовують nginx, тоді як у квітні 2011 року цей показник становив 6.8%. В РФ nginx використовується на 58.2% найбільш відвідуваних сайтів (в 2011 — 46.9%).

Nginx використовується для 68.87% всіх українських доменів[8].

Архітектура і масштабованість

В nginx робочі процеси обслуговують одночасно безліч з'єднань, мультиплексуючи їх викликами операційної системи select, epoll (Linux) і kqueue (FreeBSD). Робочі процеси виконують цикл обробки подій від дескрипторів (див. подієво-орієнтоване програмування). Отримані від клієнта дані розбираються з допомогою кінцевого автомата. Розібраний запит послідовно обробляється ланцюжком модулів, що задається конфігурацією. Відповідь клієнту формується в буферах, які зберігають дані або в пам'яті, або вказують на відрізок файлу. Буфери об'єднуються в ланцюжки, що визначають послідовність, в якій дані будуть передані клієнтові. Якщо операційна система підтримує ефективні операції вводу-виводу, такі як writev і sendfile, то nginx застосовує їх при нагоді.

Віртуальні сервери

Конфігурація HTTP-сервера nginx дозволяє визначати віртуальні веб-сервери (директива server), які фізично знаходяться й обслуговуються одним сервером. Віртуальні сервери поділяються на локації (location). Для віртуального сервера можливо задати адреси і порти, на яких будуть прийматися з'єднання, а також імена, які можуть включати * для позначення довільній послідовності в перший і останній частині, або задаватися регулярним виразом.

Локації можуть задаватися точним URI, частиною URI, або регулярним виразом. location'и можуть бути налаштовані для обслуговування запитів зі статичного файлу, проксування на http, fastcgi чи memcached сервер.

Керування пам'яттю

Для ефективного керування пам'яттю nginx використовує пули — це послідовність попередньо виділених блоків динамічної пам'яті. Довжина блоку змінюється в межах від 1 до 16 кілобайт. Спочатку пулу надається лише один блок. Блок розподіляється на зайняту область й незайняту. Виділення дрібних об'єктів виконується шляхом просування покажчика на незайняту область з урахуванням вирівнювання. Якщо незайнятої області в усіх блоках бракує для виділення нового об'єкта, то виділяється новий блок. Якщо розмір виділеного об'єкта перевищує значення константи NGX_MAX_ALLOC_FROM_POOL або довжину блоку, то він повністю виділяється з купи.

Таким чином, дрібні об'єкти виділяються дуже швидко та мають накладні витрати тільки на вирівнювання.

Географічна класифікація клієнтів

nginx містить модуль географічної класифікації клієнтів за IP-адресою. У його основу входить база даних відповідності IP-адрес географічному регіону, представлена у вигляді Radix tree (стиснуте префіксне дерево або стиснений бор[що це?]) в оперативній пам'яті. nginx попередньо розподіляє перші кілька рівнів дерева, таким чином, щоб вони займали рівно 1 сторінку пам'яті. Це гарантує, що при пошуку IP-адреси для перших декількох вузлів при трансляції адреси завжди знайдеться запис у буфері асоціативної трансляції (TLB).

Див. також


Виноски

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.