nginx

Разобраться, как nginx принимает решения - и научиться настраивать его без гугла под рукой.

~/courses/nginx $ ls

Курс держится на одной идее: nginx - не мешок директив, которые надо запомнить, а машина, принимающая последовательность решений над каждым запросом. Кто ответит. Какой блок обработает. Отдать файл или отправить дальше. Как только эта последовательность у тебя в голове, конфиги перестают быть шаманством.

Поэтому теории здесь ровно столько, сколько нужно, чтобы решить следующую задачу. А задачи настоящие: ты пишешь конфиг, и его прогоняют реальные запросы - прямо в браузере, без сервера. Проверяется не текст, а поведение: сработает твой конфиг или нет, решает маршрутизатор, а не сравнение с эталоном. Способов написать правильно много, и любой из них засчитается.

Материал по nginx 1.30 (stable) и 1.31 (mainline) - включая то, чего ещё нет в большинстве руководств: нативный ACME-модуль, HTTP/2 к бэкенду, forward proxy.

1. Как nginx думает

Зачем он нужен, как его поставить, из чего он состоит и что делает с каждым запросом. Плюс словарь терминов - для тех, кто до этого имел дело только с Django или WordPress.

  1. 1.1 Зачем перед приложением ещё один сервер 18 мин

    Сможешь объяснить, что именно ломается, если выставить приложение в интернет напрямую, и чем nginx отличается от Apache и IIS.

  2. 1.2 Поставить и потрогать 16 мин

    Запустишь свой nginx за пять минут и поймёшь слова, которыми о нём говорят.

  3. 1.3 Протокол, который nginx разбирает 30 мин

    Разберёшься, как устроены запрос и ответ, что из адреса доезжает до сервера и почему соединение живёт дольше запроса.

  4. 1.4 Один мастер, много воркеров 12 мин

    Поймёшь, почему nginx держит десятки тысяч соединений, и перестанешь путать воркеры с потоками.

  5. 1.5 Конфиг: где лежит и как не уронить прод 15 мин

    Научишься менять конфиг на живом сервере так, чтобы ни один запрос не пострадал.

  6. 1.6 Жизненный цикл запроса 15 мин

    Сможешь по конфигу проследить путь любого запроса и предсказать, чем он кончится.

  7. 1.7 Конспект раздела: как nginx думает 6 мин

    Три уровня понимания и главная схема курса - шесть решений по каждому запросу.

2. Язык конфига

Директивы, блоки, контексты, наследование и переменные. После этого раздела чужой конфиг читается как текст, а не как ребус.

  1. 2.1 Директивы, блоки, контексты 14 мин

    Научишься читать любой конфиг и понимать, где какая директива вообще имеет право стоять.

  2. 2.2 Наследование директив 14 мин

    Будешь заранее видеть, какая директива унаследуется вниз, а какая молча отменит всё, что выше.

  3. 2.3 Переменные 12 мин

    Запомнишь десяток переменных, которые реально нужны каждый день, и поймёшь, откуда они берутся.

  4. 2.4 Конспект раздела: язык конфига 6 мин

    Синтаксис, наследование с тремя исключениями, переменные и приёмы отладки.

3. Кто отвечает на запрос

listen, server_name, default_server. Первое настоящее решение nginx - каким блоком обрабатывать запрос.

  1. 3.1 listen и порты 12 мин

    Сможешь разложить любой listen на составляющие и объяснить, что слушает сервер.

  2. 3.2 server_name и приоритеты имён 18 мин

    Научишься точно предсказывать, какой server-блок ответит на конкретный Host.

  3. 3.3 default_server и чужие запросы 14 мин

    Закроешь сервер от запросов с чужими и подставными именами хоста.

  4. 3.4 Конспект раздела: кто отвечает 6 мин

    Алгоритм выбора server-блока, приоритеты имён и обязательная заглушка.

4. location - сердце маршрутизации

Приоритеты =, ^~, регулярок и префиксов, порядок объявления, вложенность. Самый частый источник «почему оно не работает».

  1. 4.1 Как выбирается location 20 мин

    Сможешь для любого URI назвать победивший location, не запуская nginx.

  2. 4.2 Вложенные и именованные location 15 мин

    Научишься раскладывать сложную маршрутизацию по вложенным блокам, не запутавшись.

  3. 4.3 Конспект раздела: location 6 мин

    Алгоритм выбора на одной карточке и пять фактов, которые экономят вечер.

5. Отдаём файлы

root против alias, try_files, index, autoindex, кеш-заголовки. И почему SPA живёт на одной строке конфига.

  1. 5.1 root против alias 18 мин

    Перестанешь путать их навсегда - и заодно поймёшь, как на alias получают чужие файлы.

  2. 5.2 try_files и SPA 20 мин

    Соберёшь конфиг для одностраничного приложения и объяснишь каждое слово в нём.

  3. 5.3 Кеш-заголовки и отдача кусками 20 мин

    Настроишь кеширование так, чтобы обновления доезжали до пользователя, а трафик не тратился зря.

  4. 5.4 Конспект раздела: отдаём файлы 6 мин

    Путь запроса к файлу, формулы root/alias и стратегия кеша по типам.

6. Логи и отладка

Как понять, что произошло, по строчке в логе - и как настроить логи, чтобы такая строчка вообще была.

  1. 6.1 access_log и log_format 18 мин

    Соберёшь свой формат лога, из которого видно и клиента, и время бэкенда.

  2. 6.2 Читаем 403, 404, 502, 504 20 мин

    По коду ответа и строке error_log будешь сразу называть причину, а не гадать.

  3. 6.3 Конспект раздела: логи и отладка 6 мин

    Разделение труда двух логов, свой формат и карта «код → куда смотреть».

7. Обратный прокси

proxy_pass и всё, что вокруг него: слеш, заголовки, реальный IP клиента, таймауты, WebSocket.

  1. 7.1 Слеш в proxy_pass 18 мин

    Раз и навсегда разберёшься, когда префикс location срезается, а когда нет.

  2. 7.2 Заголовки: Host, X-Real-IP, X-Forwarded-* 20 мин

    Донесёшь до приложения настоящий адрес клиента и схему запроса.

  3. 7.3 PHP и FastCGI 20 мин

    Поднимешь сайт на PHP и не оставишь в нём двух классических дыр.

  4. 7.4 WebSocket, таймауты, буферизация 20 мин

    Проведёшь через прокси живое соединение и не словишь разрыв через минуту.

  5. 7.5 Конспект раздела: обратный прокси 6 мин

    Что настраивают у любого прокси, слеш в proxy_pass и все ловушки списком.

8. upstream и балансировка

Несколько бэкендов, методы балансировки, keepalive, sticky-сессии директивой sticky (1.29.6), HTTP/2 к бэкенду.

  1. 8.1 Методы балансировки 18 мин

    Выберешь метод под свою нагрузку и объяснишь, чем round-robin хуже least_conn.

  2. 8.2 Отказы, backup и keepalive 20 мин

    Настроишь пул так, чтобы падение одного бэкенда не роняло сайт.

  3. 8.3 Конспект раздела: upstream 6 мин

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

9. TLS без магии

Сертификат, цепочка, ключ, SNI, HSTS, OCSP. Выпуск через certbot и через нативный ACME-модуль nginx.

  1. 9.1 Сертификат, цепочка и ключ 20 мин

    Поймёшь, что именно лежит в fullchain.pem, и научишься чинить «сертификат не для этого имени».

  2. 9.2 Выпуск сертификатов: certbot и модуль ACME 20 мин

    Настроишь автоматическое продление двумя способами и выберешь подходящий.

  3. 9.3 HSTS, протоколы, шифры 18 мин

    Соберёшь TLS-настройки, которые не устареют через полгода.

  4. 9.4 Конспект раздела: TLS 6 мин

    Файлы сертификата, выпуск и продление, что настраивать и что уже устарело.

10. HTTP/2 и HTTP/3

Директива http2 вместо параметра listen, QUIC поверх UDP, Alt-Svc, Early Hints.

  1. 10.1 HTTP/2 сегодня 18 мин

    Включишь HTTP/2 в современном синтаксисе и поймёшь, что он реально даёт.

  2. 10.2 HTTP/3 и QUIC 22 мин

    Поднимешь HTTP/3, включая правило файрвола, о котором все забывают.

  3. 10.3 Конспект раздела: HTTP/2 и HTTP/3 6 мин

    Три поколения транспорта, как включается каждое и что перестало быть полезным.

11. Скорость

Сжатие, кеш ответов бэкенда, отдача больших файлов - и как измерить эффект, не обманув себя.

  1. 11.1 gzip и brotli 18 мин

    Настроишь сжатие так, чтобы оно помогало, а не жгло процессор впустую.

  2. 11.2 Отдача больших файлов и замеры 18 мин

    Настроишь раздачу тяжёлых файлов под свою нагрузку и научишься доказывать, что стало лучше.

  3. 11.3 Кеширование ответов бэкенда 26 мин

    Соберёшь кеш с ключом, зонами и отдачей просроченного при падении бэкенда.

  4. 11.4 Конспект раздела: скорость 6 мин

    Три рычага - сжатие, отдача, кеш - и три ошибки, которые дороже всего.

12. Безопасность и лимиты

Ограничение частоты запросов, доступ по IP, авторизация, заголовки безопасности и типовые дыры в конфигах.

  1. 12.1 limit_req и limit_conn 24 мин

    Ограничишь злоупотребления, не отрезав живых пользователей.

  2. 12.2 Доступ: allow, deny, auth_basic, auth_request 28 мин

    Закроешь админку несколькими независимыми способами, а платные файлы - подписанными ссылками.

  3. 12.3 Типовые дыры в конфигах 20 мин

    Научишься замечать alias-traversal и потерянные заголовки безопасности при ревью.

  4. 12.4 Конспект раздела: безопасность и лимиты 6 мин

    Дырявое ведро, порядок правил доступа и шесть типовых дыр с проверкой curl'ом.

13. rewrite, return, map и if

Фазы обработки, почему if опасен, и как заменить его на map.

  1. 13.1 return против rewrite 22 мин

    Будешь выбирать между ними осознанно, а не копировать со Stack Overflow.

  2. 13.2 map вместо if 20 мин

    Перепишешь любой опасный if на map или на отдельный location.

  3. 13.3 Конспект раздела: rewrite, return, map 6 мин

    Конвейер фаз и три следствия, замены для if и свежие CVE.

14. За пределами HTTP

Проксирование произвольного TCP и UDP, forward proxy, njs обзором - и справочник по остальным модулям стандартной сборки.

  1. 14.1 stream: TCP и UDP 20 мин

    Пропустишь через nginx базу или почтовый протокол, а не только HTTP.

  2. 14.2 Forward proxy, njs и остальные модули 24 мин

    Разберёшься, что появилось в nginx 1.31, и получишь карту всех остальных модулей стандартной сборки.

  3. 14.3 Конспект раздела: за пределами HTTP 6 мин

    http против stream, маршрут по SNI и что уже есть в стандартной сборке.

15. Эксплуатация

Как жить с nginx в проде: обновления без даунтайма, метрики и алерты, безопасные выкладки, разбор инцидентов.

  1. 15.1 Reload, обновление бинарника, systemd 18 мин

    Обновишь nginx на живом сервере без единого потерянного запроса.

  2. 15.2 Наблюдаемость и безопасные выкладки 18 мин

    Увидишь проблему раньше пользователей и выкатишь новую версию, не рискуя всеми сразу.

  3. 15.3 Разбор инцидентов 24 мин

    По симптому будешь быстро находить причину: 502, 504, 413, 499, worker_connections.

  4. 15.4 Конспект раздела: эксплуатация 6 мин

    Что делает reload и чего не делает, три метрики и порядок первых пяти минут.

16. Финальный проект

Собрать с нуля конфиг для реального стека и провести его через два десятка проверочных запросов.

  1. 16.1 Итоговый конфиг 50 мин

    Соберёшь прод-конфиг целиком: статика, API, WebSocket, TLS, кеш, лимиты.

  2. 16.2 Шпаргалка по всему курсу 12 мин

    Одна страница вместо перечитывания курса: шесть решений, все приоритеты, готовые блоки конфига, команды и карта «что делать, если».

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.