Історія заснованої росіянами компанії Nginx, про купівлю якої американською корпорацією F5 Networks за $670 млн стало відомо 11 березня, сягає початку 2000-х. Сайти та сервіси не витримували зростання кількості інтернет-користувачів, системний адміністратор Rambler Ігор Сисоєв витратив два роки на вирішення цієї проблеми та написав веб-сервер Nginx. Веб-сервер зберігає дані інтернет-сайту, приймає запити від користувачів та у відповідь видає їм сторінки сайту, зображення та файли. Наразі на Nginx працює 25% інтернет-сайтів. Спочатку це було академічним завданням. . У 2018 р. – Виручка Nginx склала $26 млн, розкрила F5 Networks.
Російські партнери Netflix
Максим Коновалов: Є кумедна історія з нашими прес-релізами у 2013 р., де було написано, що у нас на той момент не було жодного клієнта, що сплачує. Насправді йшлося про те, що у нас не було клієнтів, що платять Nginx Plus (рішення з платними модулями з управління трафіком), а клієнти, які нам платили за інші послуги, були. Наприклад, з Netflix ми робили нелюдський проект: допомагали їм створити власний CDN (content delivery network, спеціальний сервіс, який пришвидшує доставку контенту користувачам. – «Відомості»). У той же час, це для нас найбільший фейл. Я підозрюю, що Netflix завдяки йому заощадив колосальні гроші, число з сімома нулями, а ми заробили в 100 разів менше. Але в ідеальному світі ми домовилися б на довічні платежі за цей проект.Однак тоді ми мали хиткі переговорні позиції, та й бізнесмени з нас так собі.
Ігор Сисоєв: Все складається з низки випадковостей. Netflix хотів переїхати з публічних CDN (Akamai, Level3, LimeLight – великі), яким платив великі гроші за трафік. Вони найняли кількох людей з Level3, які працювали з популярною на той момент операційною системою FreeBSD. Ми теж працювали з цією операційною системою, і хтось їм порадив використати Nginx.
М. К.: У нас на той момент навіть не було офісу у США. Вони прийшли з проблемою, що швидкість роздачі відео c CDN не перевищує 1 Гбіт/с, і ми досить швидко розігнали до 10 Гбіт/с, а потім і до 40 Гбіт/с. Здається, вже через рік, 2012 р., вони почали відмовлятися від контрактів із сторонніми CDN та переїжджати на свій власний. Потім без нашої участі вони змогли досягти швидкості роздачі відео з одного сервера до 100 Гбіт/с шифрованого трафіку. Для Netflix це важливо, тому що в дні виходу найпопулярніших серіалів на цей сервіс припадає до 37% американського трафіку.
– Влітку 2018 р. ви говорили, що у вас близько 1500 клієнтів, що платять. Чи можете назвати зараз їх кількість?
М. К.: Сьогодні це будь-які великі компанії, чий бізнес зав'язаний до інтернету. Візьмемо великого традиційного рітейлера з Fortune 500, який має інтернет-магазин. Там десятки тисяч артикулів та відвідувачів, які нічого наднаукового не роблять. Але для компанії дуже важливою є безперебійна робота, оскільки онлайн вже приносить їм половину доходів. Якщо говорити про сегменти, то наші клієнти представлені практично скрізь: автовиробники, страхування, банки, ігрові компанії, медіа, різні CDN та телекомкомпанії. Nginx має мільйони користувачів безкоштовного open source рішення і більше 1500 клієнтів, що платять.(Open source – програми із загальнодоступним вихідним кодом програми, які можна вільно завантажувати та використовувати. Користувачі можуть переглядати та редагувати код. – «Відомості».) Рішеннями Nginx користуються три з п'яти найбільших банків світу, три з п'яти найбільших американських рітейлерів та п'ять із 10 найбільших технологічних компаній. Серед клієнтів Nginx – розробник Photoshop Adobe, розробник безкоштовно CDN Cloudflare, видання BuzzFeed, сервіс колективних знижок Groupon, система управління сайтом WordPress.
Nginx (eNGIne X, "Енджинкс" або "Енджин-ікс") – це програмне забезпечення з відкритим вихідним кодом для створення легкого та потужного веб-сервера. Також його використовують як поштовий або зворотний проксі-сервер. Nginx вирішує проблему падіння продуктивності зі зростанням трафіку і є найпопулярнішим веб-сервером у Росії та другим у світі.
Опануйте професію «Веб-розробник»
Nginx розробив Ігор Сисоєв, системний адміністратор "Рамблера", в 2002 році, щоб вирішити проблему з просіданням під навантаженням. У 2004 році продукт став доступним для широкого кола користувачів та отримав схвалення. З 2011 випуском займається власна фірма Ігоря, яка через 2 роки представила розширену платну версію продукту (Nginx Plus).
Безкоштовний профорієнтаційний проект
Пройдіть тест та визначте ваш напрямок у IT. Вигравайте призи, отримуйте подарунки та особистий план розвитку через безкоштовні гайди та кар'єрну консультацію.
Навіщо потрібен
Зараз Nginx обслуговує з'єднання, обробляє запити, що надходять до сервера, а також використовується:
- для обробки запитів із сайтів, де багато статичного постійного контенту;
- обслуговування серверів, куди надходить багато запитів одночасно;
- як проксі, поштовий сервер або для розподілу навантаження на серверну частину.
- SSL/TLS термінація: Nginx здатний виконувати термінацію SSL/TLS, забезпечуючи шифрування та дешифрування даних між клієнтами та серверами. Це знижує навантаження на бекенд-сервери та покращує безпеку.
Особливості Nginx
Висока швидкість
Особливо помітна під час роботи зі статичним контентом, який потрібно постійно оновлювати. Коли користувач завантажує сторінку сайту, веб-сервер Nginx кешує дані у себе, а потім повертає результат. При наступних запитах сторінки відповідь відбувається у кілька разів швидше.
Гнучкість
Програмне забезпечення гнучко конфігурується та налаштовується під потреби інфраструктури.
Мале споживання пам'яті
Щоб зменшити навантаження на оперативну пам'ять, Nginx використовує виділений сегмент пам'яті пул (pool). Він динамічний і може розширюватися зі збільшенням довжини запиту.
Стати веб-розробником і знайти стабільну роботу на віддаленні
Хороша підтримка
Nginx має активну ком'юніті і хорошу клієнтську підтримку, а документацію доступно і російською мовою.
Доступність
Програма безкоштовна та поширюється за вільною ліцензією. Вона має відкритий програмний код, тому будь-який розробник може адаптувати Nginx під себе.
Як працює Nginx
Коли користувач чинить дію на сторінці, інформація передається на сервер. Він знаходить файли, повідомляє відомості.
Якщо обробляти запити кожного користувача окремо, серверу доведеться одночасно виконувати багато процесів. Сайт почне працювати повільно. Nginx дозволяє оминути обмеження. Його архітектура асинхронна: всі запити обробляються різних етапах, що підвищує швидкість обробки.
Запити від одного користувача розбиваються на невеликі структури – мережні з'єднання. Обробка відбувається швидше: за однотипні дії відповідає один процес. Після обробки з'єднання збираються в одному віртуальному контейнері, щоб перетворитися на єдиний початковий запит, а потім відправляються користувачеві. Завдяки такому принципу роботи Nginx одне мережне з'єднання може обслуговувати до 1024 запитів.
Для яких ОС підходить Nginx
Nginx є мультиплатформним веб-сервером і проксі-сервером, який підходить для різних операційних систем. Ось список деяких з найбільш популярних ОС, на яких можна встановити та запустити Nginx:
- Linux: Nginx є основним вибором для багатьох Linux-дистрибутивів. Це включає такі дистрибутиви, як Ubuntu, Debian, CentOS, Red Hat Enterprise Linux (RHEL), Fedora, openSUSE та багато інших.
- Unix (BSD): Nginx також добре працює на різних Unix-подібних системах, включаючи FreeBSD та OpenBSD.
- macOS: Ви можете встановити Nginx на комп'ютерах Mac за допомогою пакетних менеджерів, таких як Homebrew.
- Windows: Хоча Nginx не є стандартним вибором для Windows, існує офіційна підтримка Nginx для Windows, і його можна використовувати на цій платформі.
- Docker: Nginx також може бути запущений у контейнерах Docker різних ОС.
- UNIX-подібні системи у хмарі: Ви можете встановити Nginx на різних хмарних платформах, таких як Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP) та інші.
- Інші ОС: Nginx може бути скомпільований і працювати на багатьох інших операційних системах, якщо є відповідні версії компіляторів та бібліотек.
Що вибрати: Nginx або Apache
Apache – головний конкурент Nginx. Існує довше, тому має більшу ком'юніті. Працювати з Apache легше за рахунок простої архітектури та повноцінної підтримки Windows. Працюючи з динамічним контентом показує таку ж продуктивність, як Nginx. Але статичний контент Nginx обробляє в 2,5 рази швидше, споживаючи менше пам'яті.
| Параметр | Nginx | Apache |
|---|---|---|
| Тип | Веб-сервер, проксі-сервер | Веб-сервер |
| Ліцензія | BSD-style | Apache License 2.0 |
| Архітектура | Подієва (event-driven) | Процесо-орієнтована (process-based) |
| Продуктивність | Висока, ефективне управління ресурсами | Висока, але ресурсозатратніша |
| Поширеність | Популярний, широко використовується | Популярний, широко використовується |
| Модульність | Обмежена | Висока, безліч модулів |
| Конфігурація | Проста, читана | Мінлива, складна |
| Версія PHP (модуль PHP-FPM) | Так | Так |
| Підтримка .htaccess файлів | Ні | Так |
| Масштабованість | Хороша, легко масштабується | Гарна, але може знадобитися більше зусиль |
| Віртуальні хости | Легко налаштовуються | Легко налаштовуються |
| SSL/TLS підтримка | Так | Так |
| Сумісність із Windows | Обмежена (офіційно лише через WSL) | Так, повна підтримка |
| Проксування | Чудове | Відмінне |
| Підтримка HTTP/2 | Так | Так |
| Документація | Добре документовано | Добре документовано |
| Спільнота та підтримка | Активне | Активне |
Nginx може працювати у зв'язці з Apache. Якщо запит приходить видачу статичного матеріалу, його обробляє Nginx. Якщо користувачеві потрібний динамічний контент (графіка, відео), підключається Apache.
Три кроки до нової спеціальності. Пройдіть тест, щоб визначити свою IT-професію. На прямому ефірі дізнайтесь все про п'ять топових IT-спеціальностей та виберіть свою.Отримайте шанс виграти грант на навчання, сертифікат на 5000 рублів або курс SQL.
Коли ми відкриваємо якийсь сайт у браузері, браузер надсилає запит, щоб отримати потрібні файли: HTML-розмітку, стилі, скрипти, картинки та інший контент. Цей запит надсилається на веб-сервер – спеціальну програму, яка відповідає за передачу таких даних через Інтернет. Веб-сервер отримує запит, знаходить запитані дані, відправляє браузеру, який їх обробляє і показує нам готову сторінку.
👉 Якщо цікаво, як цей процес відбувається в деталях, почитайте нашу статтю про те, що відбувається, коли ми відкриваємо сайт у браузері.
Раніше ми вже розповідали про Apache – один із перших масових веб-серверів, який досі обслуговує величезну кількість сайтів. Сьогодні поговоримо ще про один веб-сервер і розповімо, як працює і навіщо потрібний nginx. Якщо що, назва nginx вимовляється як "енджинкс".
Що таке nginx
Nginx – це веб-сервер з відкритим вихідним кодом, розроблений російським програмістом Ігорем Сисоєвим.
Nginx був створений для того, щоб обробляти велику кількість запитів одночасно. З Apache була велика проблема: його продуктивність падає зі зростанням трафіку. Чим більше людей заходять на сайт, тим гірше справляється веб-сервер. Рішення на той момент були такі:
І те, й інше дорого. Щоб вирішити цю проблему, 2002 року Ігор Сисоєв почав розробляти свою програму і за два роки випустив перший реліз. Сьогодні nginx – найпопулярніший веб-сервер у світі.
Як працює nginx
Основна функція nginx – веб-серверна обробка HTTP-запитів, але він також може працювати як зворотний проксі-сервер, балансувальник навантаження, кеш-сервер і навіть поштовий проксі-сервер.
Щоб зрозуміти принцип роботи nginx із HTTP-запитами, спочатку подивимося, як з ними працює Apache. Припустимо, що Apache отримав запит показати сторінку сайту з товарами, які відповідають обраним критеріям. Готовий такої сторінки немає – вона збирається динамічно за фільтрами користувача.
Щоб сторінка все ж таки з'явилася, її повинен згенерувати движок сайту (site engine). Отримавши запит від браузера, Apache передає движку команду зібрати сторінку, а поки що сторінка генерується, Apache нічого не робить, а просто чекає. Якщо таких запитів багато, Apache витрачає ресурси на простий та очікування, а не на реальну роботу.
Nginx влаштований трохи інакше.
Асинхронність. Асинхронність – суперсила nginx, яка працює приблизно так:
- Кожен запит потрапляє до списку завдань.
- Спеціальний цикл по черзі швидко переглядає кожне завдання і дивиться, чи треба по ньому щось робити або ще чекаємо.
- Якщо треба робити, робить і надсилає відповідь. Або дає завдання іншим, щоби теж щось зробили.
- Відразу після цього цикл переходить до іншого завдання і все повторяться.
- Так круг за колом цикл перебирає всі завдання, які надходять на сервер, і жонглює ними, керуючи по черзі.
- Щоб було швидше, nginx може запустити одночасно кілька таких циклів, синхронізуючи їх роботу друг з одним.
Виходить, що nginx не витрачає час на очікування результату, тому може одночасно обробляти набагато більше запитів, ніж Apache.
Балансування навантаження. Nginx часто використовується для того, щоб приймати різні запити від клієнтів, наприклад, браузерів, і перенаправляти їх на інші ресурси, наприклад сервери додатків або баз даних. Ці хлопці обробляють свої запити та віддають результат nginx, а він повертає відповіді клієнтам, тобто виступає у ролі прошарку. Технічно це називається "зворотний проксі-сервер" (reverse proxy).
Зазвичай використовують прямий проксі, він збирає запити від клієнтів та відправляє їх на сервер:
Зворотний проксі приймає запити, а потім розподіляє їх на інші сервери. Наприклад, якщо nginx бачить, що один сервер починає довго відповідати, він може надіслати нові запити на інші сервери, щоб зменшити загальний час очікування:
Кешування. Щоб ще більше прискорити час відповіді клієнту, nginx вміє зберігати дані за найчастішими запитами. Наприклад, на сайті вийшла нова стаття, і всі одразу пішли її читати. Щоб не надсилати щоразу новий запит на різні сервери за однією і тією ж статтею, nginx кешує всі файли для відповіді і зберігає їх у якийсь час. А коли популярність спаде, nginx видаляє кешовані дані зі свого сховища.
Безпека за великої кількості трафіку. У великій компанії дані можуть зберігатися на різних серверах. Відкривати їх усе для публічного доступу небезпечно, тому що найчастіше такі сервери пов'язані між собою, наприклад, у банківській програмі. Будувати захист для кожного сервера довго, дорого та складно. Достатньо забути оновити на одному з серверів, і вразливість отримує вся система.
Nginx може служити одним вікном входу – можна відкрити для публічного доступу лише цей веб-сервер і зосередити всі зусилля безпеки на ньому.
Nginx та статичні та динамічні сайти
Сторінки бувають статичними та динамічними:
- Статичні сторінки – це готові документи, які не змінюються. Наприклад, сайти-візитки або сторінки зі статтями завжди виглядають однаково – доти, доки в їх код не внесуть зміни.
- Динамічні сторінки генеруються на сервері. Найяскравіший приклад – сторінки в соцмережах. Вони залежать від того, що в цих соцмережах відбувається, але розробники не програмують кожну зміну вручну. Код сторінки, яку побачить конкретний користувач, збирається автоматично.
Nginx ідеально поєднується зі статичними запитами, тому що асинхронна архітектура дозволяє обробляти їх багато та швидко. Навіть якщо nginx працює як балансувальник навантаження та проксі-сервер, він може зберегти певні файли у свій кеш і працювати як звичайний сервер, що віддає дані з бекенда.
А ось динамічний контент nginx збирати не може. Він перенаправляє такі запити на сервери, де працюють програми для побудови динамічної сторінки, наприклад, у той же Apache.
Чим ще відрізняється nginx від Apache
документація. У Apache документації, форумів та прикладів набагато більше, тому що проект розпочався на 7 років раніше і всі матеріали одразу були англійською – стандартною мовою для всіх програмістів.
Nginx з'явився пізніше і в Росії, тому майже вся документація спочатку була російською. Через це розробникам з інших країн було важко використовувати nginx, але згодом ситуація вирівнялася: зараз проект ведеться одночасно російською та англійською мовами.
Робота із модулями. В Apache все просто: прописав назву модуля – і веб-сервер одразу його підвантажив та почав використовувати. Не треба – вивантажив, теж на ходу.Це дозволяє дуже гнучко налаштовувати поведінку сервера у різні моменти часу.
Щоб додати модулі до nginx, їх потрібно вибрати заздалегідь і скомпілювати разом із ядром сервера. З одного боку, це незручно: потрібно на старті чітко уявляти, що робитиме сервер і в яких ситуаціях. Але з іншого — це підвищує безпеку: не вдасться на льоту підключити якийсь невідомий та неперевірений модуль, у якому буде дірка у безпеці.
Конфігурація та налаштування. Apache управляється через службові файли, у які він постійно заглядає, наприклад .htaccess. Це знову гнучкість і можливість дуже тонкого настроювання поведінки для кожної папки та запиту. Але Apache щоразу витрачає час на такі читання та перевірки, а коли запитів багато, то це стає критично. Ще потрібно переглянути всі папки, до яких йде запит, а це також час.
Nginx працює інакше: все зберігається в одному файлі конфігурації. Цей файл відповідає за налаштування всього сервера і nginx точно знає, де його швидко знайти. Це безпечніше для роботи сервера: ніхто не зможе покласти в папку свій файл .htaccess, прописати в ньому чорт-те що і зламати роботу всього сервера.
Що вибрати: nginx або Apache
Може здатися, що nginx і Apache воюють один з одним за частку ринку, але насправді вони добре працюють разом:
- Ставимо nginx та Apache на один сервер.
- Налаштовуємо Apache для обробки запитів на динамічні сторінки. Найчастіший приклад такого – зібрати і віддати сторінку на PHP-движку Вордпрес.
- Налаштовуємо nginx, щоб він віддавав готові статичні сторінки, які запитують найчастіше.
- Також говоримо, щоб nginx обробляв всю решту статики: віддавав, якщо потрібно, окремо файли, картинки, музику та інше, що має постійну адресу та вміст.
- А все інше, що потрібно збирати динамічно, – перенаправляємо на Apache.
Виходить так: nginx займається найпростішими запитами, які можна виконати миттєво, а всю динаміку та складання відправляє в Apache і продовжує займатися своїми справами.
В результаті користь усім: поки Apache чекає або збирає сторінки, nginx встигає переробити купу справ і не витрачає свого часу на очікування. Системні адміністратори часто використовують таку зв'язку, щоб збалансувати навантаження на сервер та ефективніше використовувати ресурси.
Хто використовує nginx
Якщо ви назвете три будь-які великі ІТ-компанії, дві з них точно будуть використовувати nginx. У цьому можна легко переконатись самому, подивившись на список тих проектів, де використовують цю програму:
- Яндекс;
- ВКонтакті;
- Хабр;
- ЖЖ;
- Авіто;
- Хедхантер;
- Фейсбук та Інстаграм (належать компанії Meta, яка заборонена в Росії);
- Вордпрес;
- Пінтерест;
- Нетфлікс.
Зараз 34% від усіх веб-серверів – це nginx, а за ним вже йде Apache, у нього 29%.
Причина такої популярності – у швидкості роботи, надійності та універсальності nginx. До нього можна прикрутити майже будь-який софт, на ньому можна отримати будь-яку конфігурацію відповідей на запити. Така взаємодія налаштовується через проксі, протоколи HTTP та FastCGI та інші механізми.
Як підготувати та встановити nginx
За промовчанням nginx призначений для роботи в системах Linux. Для серверів це оптимальний варіант: у Linux відкритий вихідний код, гнучке налаштування та є великий вибір корисних доповнень, які можна використовувати для посилення безпеки та інших цілей.
На офіційному сайті nginx є кілька інструкцій щодо його встановлення на різні версії Linux.Взагалі, nginx можна встановити і на MacOS або Windows, але для цього доведеться або піднімати віртуальне оточення, або скористатися інструкціями з іншими обхідними шляхами. Швидкість та якість роботи таких варіантів перевірити складно, а також можливості веб-сервера можуть бути обмежені.
Якщо у вас немає Linux, але ви хочете попрацювати з nginx, можна поставити як другу операційну систему Ubuntu – це найпростіша версія Linux. Її установка займе не більше півгодини, після чого потрібно дотримуватися простої інструкції:
1. Завантажуємо пакети. Вони будуть відповідати за підключення до apt-репозиторію – це щось на зразок магазину додатків для Linux. Використовуємо таку команду:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
2. Вказуємо ключ. Він буде використовуватися для автентифікації пакетів:
curl https://nginx.org/keys/nginx_signing.key | gpg –dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg –dry-run –quiet –no-keyring –import –import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
4. Підключаємо apt-репозиторій:
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
5. Налаштовуємо закріплення:
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx
6. Встановлюємо nginx (нарешті!):
sudo apt update
sudo apt install nginx
Все, nginx встановлений, але він поки нічого не вміє, тому потрібно налаштувати його і пояснити йому, як приймати запити і що з ними робити.
Конфігурація та налаштування сервера nginx
Як працюватиме веб-сервер Nginx, визначає файл конфігурації. За замовчуванням він називається nginx.conf і після встановлення лежить в одній із цих папок:
Найпростіше налаштування файлу конфігурації для роботи nginx як звичайний веб-сервер може виглядати так:
# створюємо блок налаштувань веб-сервера server < # говоримо серверу приймати запити на порт 80 listen 80; # вказуємо доменне ім'я для сайту # веб-сервер буде чекати на запити на це ім'я server_name example.com www.example.com; # додаємо адресу директорії, де зберігатимуться файли для сайту location/<root/var/www/example.com; # Вказуємо назву головного HTML-файлу index index.html; >>Для написання використовується мова власна мова веб-сервера – NGINX. Кожна інструкція для налаштування називається директивою, а кілька директив поєднуються в блоки. Наш файл налаштування готовий для запуску, щоб користувачі могли надіслати запити за вказаною адресою та отримати відповідь.
Про директиви в документації є окрема сторінка, де можна подивитися їх усі та вивчити, що робить кожна.
Конфлікт із «Рамблером»
У 2019 році відбулася така історія: Рамблер заявив, що коли Сисоєв під час створення nginx працював у компанії, то і всі права на цей веб-сервер теж належать їй. У результаті порушили справу за статтею про порушення авторських прав, а Рамблер вимагав відшкодувати йому збитки в 50 мільйонів рублів.
Через півроку кримінальну справу припинили через відсутність складу злочину: компанія не змогла знайти підтвердження своїм словам і не змогла отримати права на код nginx.
За іронією долі на nginx зараз працюють сервери і самого Рамблера:-)