nginx

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
nginx
Автор(и) Ігор Сисоєв
Розробник(и) NGINX, Inc.
Стабільний випуск 1.4 (24 квітня 2013; 357 днів тому)
Операційна система Unix, Windows, Mac OS X
Тип Веб-сервер, проксі-сервер
Ліцензія BSD
Сайт www.nginx.ru

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

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

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

Основні функції[ред.ред. код]

HTTP-сервер[ред.ред. код]

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

IMAP/POP3-проксі сервер[ред.ред. код]

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

Популярність[ред.ред. код]

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

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

Такі проекти використовують nginx:

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

В 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.

Виноски[ред.ред. код]

Посилання[ред.ред. код]