Rate this post

Наприкінці цієї статті ти зрозумієш не лише, що таке Nginx, а й чому він з’явився, для чого потрібен і як працює на практиці — з наочними прикладами, які нарешті все розкладуть по поличках.

Коли веб був простим

На початку розвитку інтернету все було доволі просто. Менше користувачів, менше сайтів, менше хаосу.
Браузер надсилав запит на сторінку одному вебсерверу. Сервер був звичайною машиною, на яку встановлювали спеціальне програмне забезпечення — воно збирало вебсторінку та повертало її назад у браузер, який показував сторінку користувачу.

І це саме ПЗ, що працювало на сервері й відповідало на HTTP-запити, —
так, це і був Nginx. Серверна програма, створена для обробки запитів браузера.

А потім веб став популярним (і почалися проблеми)

У якийсь момент сайти почали отримувати не сотні запитів, а тисячі або мільйони.

Уяви один сервер, який має обслужити мільйони запитів.
Нереально. Це далеко за межами можливостей однієї машини.

Що зробили?
Додали більше серверів. Наприклад, десять серверів з Nginx.

Але одразу виникло нове питання: як розподіляти запити між усіма цими серверами?

І тут з’являється балансування навантаження.

Nginx як балансувальник навантаження (той самий “консьєрж”)

Nginx може працювати не лише як вебсервер, а й як проксі-сервер, який розподіляє вхідні запити між декількома бекенд-серверами.

Проксі — це, по суті, “робити щось від імені когось”.
Nginx приймає запити браузерів від імені серверів, що стоять за ним, і перенаправляє їх туди, де є вільні ресурси.

Наче консьєрж у готелі, який вирішує, в який номер поселити гостя.

Як Nginx розподіляє навантаження

Залежить від вибраного алгоритму:

  • Least Connections — запит передається серверу з найменшим навантаженням.

  • Round Robin — класичний підхід: кожен сервер отримує запит по черзі, по колу.

Просто — але дуже ефективно.

На цьому етапі Nginx уже вміє бути:

  1. Вебсервером,

  2. Проксі / балансувальником навантаження.

Технологія одна, завдання різні.

Кешування: як обслужити мільйони запитів і не впасти

Уяви: New York Times публікує нову статтю. Мільйони людей відкривають її одночасно.

Якби кожен запит змушував бекенд знову:

  • тягнути зображення,

  • робити запити до бази даних,

  • збирати HTML,

  • формувати посилання,

  • надсилати відповідь…

…мільйон разів — сервери просто б лягли.

Правильний підхід?
Один раз зібрати статтю, зберегти фінальну версію й роздавати її всім.

Це кешування — одна з ключових функцій Nginx.
Воно рятує базу даних і сервери від постійного навантаження.

Безпека: зменшення поверхні атаки

Тепер уяви інтернет-банк або соцмережу на кшталт Facebook, де працює 100 серверів.

Це жирна ціль для хакерів.

Якщо зробити усі ці 100 серверів публічно доступними, стає дуже небезпечно.
Хакеру потрібна лише одна вразливість в одному сервері — і він отримає доступ до всієї системи.

Рішення?

Публічним роблять тільки Nginx-проксі, а всі бекенд-сервери ховають за ним.

Тепер потрібно захищати один сервер, а не сотню.
Поверхня атаки зменшується в рази.

Nginx стає щитом — захисним шаром між інтернетом та твоєю інфраструктурою.

Шифрування: HTTPS і строгі вимоги безпеки

Раз у нас лише одна публічна точка входу, ми можемо змусити її приймати лише зашифрований трафік.

Браузер надсилає зашифровані дані → Nginx приймає їх.
Навіть якщо хтось перехопить трафік, прочитати його неможливо.

У різних системах реалізація буває різною:

  • інколи Nginx сам розшифровує запити,

  • інколи просто пересилає їх далі у зашифрованому вигляді — це ще безпечніше.

Nginx легко налаштувати так, щоб він повністю блокував незашифрований трафік.

Стиснення: уяви Netflix ввечері

До речі, Netflix дійсно використовує Nginx.

Уяви вечір у Нью-Йорку. Виходить нова серія популярного серіалу. Мільйони людей вмикають Netflix одночасно.

Nginx має надіслати величезні відеофайли мільйонам користувачів.
Це колосальне навантаження на канали зв’язку.

Рішення? Стиснення.

Nginx може стискати:

  • великі зображення,

  • відеофрагменти,

  • інші важкі файли

Це економить трафік і прискорює доставку.

Плюс — Nginx може надсилати файли частинами, щоб користувач міг почати дивитися відео, поки інша частина ще завантажується.

Конфігурація Nginx: як він розуміє, що робити

Уся магія Nginx налаштовується через конфігураційний файл із директивами:

  • у якому режимі працювати — вебсервер або проксі,

  • які порти використовувати,

  • де зберігати кеш,

  • де лежать SSL-сертифікати,

  • куди перенаправляти трафік,

  • як балансувати навантаження,

  • які файли віддавати,

  • які маршрути обробляти…

Приклади налаштувань:

  • звичайний вебсервер на порту 80,

  • редирект HTTP→HTTPS,

  • HTTPS-сервер на порту 443 із сертифікатами,

  • балансування навантаження між кількома бекенд-серверами,

  • параметри кешування з TTL.

Конфігурація гнучка, детальна й проста — саме тому Nginx став таким популярним.

Nginx у світі контейнерів: Kubernetes Ingress Controller

Сьогодні Nginx — ключовий елемент екосистеми Kubernetes.

У Kubernetes Nginx часто використовується як Ingress Controller — фактично, проксі та балансувальник усередині кластера.

Принцип той самий:

  • отримує запити першим,

  • вирішує, куди їх скерувати,

  • маршрутизує за правилами.

Наприклад:

  • /cart → сервіс кошика

  • /payment → сервіс платежів

  • /profile → сервіс профілю

Публічний трафік приймає не Nginx, а хмарний балансувальник (наприклад, AWS ELB).
Він пересилає запити всередину кластера до Nginx Ingress — це додає додатковий рівень безпеки.

А як же Apache? У чому різниця?

Apache був стандартом до появи Nginx. Він умів робити все те саме.

Але Nginx переміг завдяки:

  • швидкості,

  • легкості,

  • ефективності зі статикою,

  • простим конфігураціям,

  • популярності у контейнерах.

Тому сьогодні Nginx — де-факто стандарт для високонавантажених систем.

Підсумок

Тепер у тебе є повна картина того, що таке Nginx:

  • вебсервер,

  • проксі,

  • балансувальник навантаження,

  • система кешування,

  • захисний шар,

  • компресор даних,

  • Kubernetes Ingress Controller.

Усе це — в одному швидкому й потужному інструменті.