nginx
![]() | |
Тип | Вебсервер, проксі-сервер |
---|---|
Автор | Ігор Сисоєв |
Розробники | NGINX, Inc. |
Стабільний випуск | 1.15.3 (28 серпня 2018 ) |
Нестабільний випуск | 1.14.0 (17 квітня 2018 ) |
Операційна система | Linux, Unix, Windows, Mac OS X |
Мова програмування | C[1] |
Ліцензія | BSD |
Репозиторій | https://hg.nginx.org/nginx, https://github.com/nginx/nginx |
Вебсайт | nginx.org |
nginx (engine x) — вільний вебсервер і проксі-сервер. Є версії для сімейства Unix-подібних операційних систем (FreeBSD, GNU/Linux, Solaris, Mac OS X) та Microsoft Windows.
Розробляється Ігорем Сисоєвим з 2002-го року для компанії Rambler і постійно вдосконалюється. Восени 2004 року вийшов перший публічно доступний реліз.
3 2011 року розробкою програми опікується заснована Ігорем Сисоєвим компанія Nginx Inc., яка розвиває вільну та комерційні версії продукту.[2][3]
11 березня 2019 року NGINX купує компанія F5 Networks за 670 мільйонів доларів.[4][5]
- обслуговування статичних запитів, індексних файлів, автоматичне створення списку файлів, кеш дескрипторів відкритих файлів
- акселероване проксіювання з підтримкою кешування
- акселерована підтримка FastCGI і memcached серверів, простий розподіл навантаження і відмовостійкість
- модульність, фільтри, gzip, byte-ranges (докачка), chunked відповіді, HTTP-аутентифікація, SSI-фільтр
- вкладені запити на одній сторінці виконуються паралельно
- підтримка SSL
- експериментальна підтримка вбудованого Perl
- експериментальна підтримка HTTP/2
- перенаправлення користувача на 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).
- ↑ The nginx Open Source Project on Open Hub: Languages Page — 2006.
- ↑ Проект Nginx получил $3 млн инвестиций и начал переход к модели Open Core. Архів оригіналу за 31 серпня 2013. Процитовано 28 квітня 2013.
- ↑ Подробности о развитии Nginx в руках коммерческой компании [Архівовано 13 листопада 2012 у Wayback Machine.] // opennet.ru
- ↑ F5 покупает NGINX. Хабр. Архів оригіналу за 11 березня 2019. Процитовано 12 березня 2019.
- ↑ F5 Acquires NGINX to Bridge NetOps & DevOps, Providing Customers with Consistent Application Services Across Every Environment. F5 Networks. Архів оригіналу за 11 березня 2019. Процитовано 11 березня 2019.
- ↑ April 2012 Web Server Survey. Архів оригіналу за 21 квітня 2012. Процитовано 25 квітня 2012.
- ↑ Usage of web servers for websites
- ↑ Статистика українського інтернету ukralio.com. www.ukralio.com (укр.). Архів оригіналу за 17 лютого 2017. Процитовано 16 лютого 2017.