nginx
Разобраться, как nginx принимает решения - и научиться настраивать его без гугла под рукой.
~/courses/nginx $ ls
Курс держится на одной идее: nginx - не мешок директив, которые надо запомнить, а машина, принимающая последовательность решений над каждым запросом. Кто ответит. Какой блок обработает. Отдать файл или отправить дальше. Как только эта последовательность у тебя в голове, конфиги перестают быть шаманством.
Поэтому теории здесь ровно столько, сколько нужно, чтобы решить следующую задачу. А задачи настоящие: ты пишешь конфиг, и его прогоняют реальные запросы - прямо в браузере, без сервера. Проверяется не текст, а поведение: сработает твой конфиг или нет, решает маршрутизатор, а не сравнение с эталоном. Способов написать правильно много, и любой из них засчитается.
Материал по nginx 1.30 (stable) и 1.31 (mainline) - включая то, чего ещё нет в большинстве руководств: нативный ACME-модуль, HTTP/2 к бэкенду, forward proxy.
1. Как nginx думает
Зачем он нужен, как его поставить, из чего он состоит и что делает с каждым запросом. Плюс словарь терминов - для тех, кто до этого имел дело только с Django или WordPress.
-
1.1
Зачем перед приложением ещё один сервер
Сможешь объяснить, что именно ломается, если выставить приложение в интернет напрямую, и чем nginx отличается от Apache и IIS.
-
1.2
Поставить и потрогать
Запустишь свой nginx за пять минут и поймёшь слова, которыми о нём говорят.
-
1.3
Протокол, который nginx разбирает
Разберёшься, как устроены запрос и ответ, что из адреса доезжает до сервера и почему соединение живёт дольше запроса.
-
1.4
Один мастер, много воркеров
Поймёшь, почему nginx держит десятки тысяч соединений, и перестанешь путать воркеры с потоками.
-
1.5
Конфиг: где лежит и как не уронить прод
Научишься менять конфиг на живом сервере так, чтобы ни один запрос не пострадал.
-
1.6
Жизненный цикл запроса
Сможешь по конфигу проследить путь любого запроса и предсказать, чем он кончится.
-
1.7
Конспект раздела: как nginx думает
Три уровня понимания и главная схема курса - шесть решений по каждому запросу.
2. Язык конфига
Директивы, блоки, контексты, наследование и переменные. После этого раздела чужой конфиг читается как текст, а не как ребус.
-
2.1
Директивы, блоки, контексты
Научишься читать любой конфиг и понимать, где какая директива вообще имеет право стоять.
-
2.2
Наследование директив
Будешь заранее видеть, какая директива унаследуется вниз, а какая молча отменит всё, что выше.
-
2.3
Переменные
Запомнишь десяток переменных, которые реально нужны каждый день, и поймёшь, откуда они берутся.
-
2.4
Конспект раздела: язык конфига
Синтаксис, наследование с тремя исключениями, переменные и приёмы отладки.
3. Кто отвечает на запрос
listen, server_name, default_server. Первое настоящее решение nginx - каким блоком обрабатывать запрос.
-
3.1
listen и порты
Сможешь разложить любой listen на составляющие и объяснить, что слушает сервер.
-
3.2
server_name и приоритеты имён
Научишься точно предсказывать, какой server-блок ответит на конкретный Host.
-
3.3
default_server и чужие запросы
Закроешь сервер от запросов с чужими и подставными именами хоста.
-
3.4
Конспект раздела: кто отвечает
Алгоритм выбора server-блока, приоритеты имён и обязательная заглушка.
4. location - сердце маршрутизации
Приоритеты =, ^~, регулярок и префиксов, порядок объявления, вложенность. Самый частый источник «почему оно не работает».
-
4.1
Как выбирается location
Сможешь для любого URI назвать победивший location, не запуская nginx.
-
4.2
Вложенные и именованные location
Научишься раскладывать сложную маршрутизацию по вложенным блокам, не запутавшись.
-
4.3
Конспект раздела: location
Алгоритм выбора на одной карточке и пять фактов, которые экономят вечер.
5. Отдаём файлы
root против alias, try_files, index, autoindex, кеш-заголовки. И почему SPA живёт на одной строке конфига.
-
5.1
root против alias
Перестанешь путать их навсегда - и заодно поймёшь, как на alias получают чужие файлы.
-
5.2
try_files и SPA
Соберёшь конфиг для одностраничного приложения и объяснишь каждое слово в нём.
-
5.3
Кеш-заголовки и отдача кусками
Настроишь кеширование так, чтобы обновления доезжали до пользователя, а трафик не тратился зря.
-
5.4
Конспект раздела: отдаём файлы
Путь запроса к файлу, формулы root/alias и стратегия кеша по типам.
6. Логи и отладка
Как понять, что произошло, по строчке в логе - и как настроить логи, чтобы такая строчка вообще была.
-
6.1
access_log и log_format
Соберёшь свой формат лога, из которого видно и клиента, и время бэкенда.
-
6.2
Читаем 403, 404, 502, 504
По коду ответа и строке error_log будешь сразу называть причину, а не гадать.
-
6.3
Конспект раздела: логи и отладка
Разделение труда двух логов, свой формат и карта «код → куда смотреть».
7. Обратный прокси
proxy_pass и всё, что вокруг него: слеш, заголовки, реальный IP клиента, таймауты, WebSocket.
-
7.1
Слеш в proxy_pass
Раз и навсегда разберёшься, когда префикс location срезается, а когда нет.
-
7.2
Заголовки: Host, X-Real-IP, X-Forwarded-*
Донесёшь до приложения настоящий адрес клиента и схему запроса.
-
7.3
PHP и FastCGI
Поднимешь сайт на PHP и не оставишь в нём двух классических дыр.
-
7.4
WebSocket, таймауты, буферизация
Проведёшь через прокси живое соединение и не словишь разрыв через минуту.
-
7.5
Конспект раздела: обратный прокси
Что настраивают у любого прокси, слеш в proxy_pass и все ловушки списком.
8. upstream и балансировка
Несколько бэкендов, методы балансировки, keepalive, sticky-сессии директивой sticky (1.29.6), HTTP/2 к бэкенду.
-
8.1
Методы балансировки
Выберешь метод под свою нагрузку и объяснишь, чем round-robin хуже least_conn.
-
8.2
Отказы, backup и keepalive
Настроишь пул так, чтобы падение одного бэкенда не роняло сайт.
-
8.3
Конспект раздела: upstream
Выбор метода балансировки, устойчивость к отказам и выкладка без простоя.
9. TLS без магии
Сертификат, цепочка, ключ, SNI, HSTS, OCSP. Выпуск через certbot и через нативный ACME-модуль nginx.
-
9.1
Сертификат, цепочка и ключ
Поймёшь, что именно лежит в fullchain.pem, и научишься чинить «сертификат не для этого имени».
-
9.2
Выпуск сертификатов: certbot и модуль ACME
Настроишь автоматическое продление двумя способами и выберешь подходящий.
-
9.3
HSTS, протоколы, шифры
Соберёшь TLS-настройки, которые не устареют через полгода.
-
9.4
Конспект раздела: TLS
Файлы сертификата, выпуск и продление, что настраивать и что уже устарело.
10. HTTP/2 и HTTP/3
Директива http2 вместо параметра listen, QUIC поверх UDP, Alt-Svc, Early Hints.
-
10.1
HTTP/2 сегодня
Включишь HTTP/2 в современном синтаксисе и поймёшь, что он реально даёт.
-
10.2
HTTP/3 и QUIC
Поднимешь HTTP/3, включая правило файрвола, о котором все забывают.
-
10.3
Конспект раздела: HTTP/2 и HTTP/3
Три поколения транспорта, как включается каждое и что перестало быть полезным.
11. Скорость
Сжатие, кеш ответов бэкенда, отдача больших файлов - и как измерить эффект, не обманув себя.
-
11.1
gzip и brotli
Настроишь сжатие так, чтобы оно помогало, а не жгло процессор впустую.
-
11.2
Отдача больших файлов и замеры
Настроишь раздачу тяжёлых файлов под свою нагрузку и научишься доказывать, что стало лучше.
-
11.3
Кеширование ответов бэкенда
Соберёшь кеш с ключом, зонами и отдачей просроченного при падении бэкенда.
-
11.4
Конспект раздела: скорость
Три рычага - сжатие, отдача, кеш - и три ошибки, которые дороже всего.
12. Безопасность и лимиты
Ограничение частоты запросов, доступ по IP, авторизация, заголовки безопасности и типовые дыры в конфигах.
-
12.1
limit_req и limit_conn
Ограничишь злоупотребления, не отрезав живых пользователей.
-
12.2
Доступ: allow, deny, auth_basic, auth_request
Закроешь админку несколькими независимыми способами, а платные файлы - подписанными ссылками.
-
12.3
Типовые дыры в конфигах
Научишься замечать alias-traversal и потерянные заголовки безопасности при ревью.
-
12.4
Конспект раздела: безопасность и лимиты
Дырявое ведро, порядок правил доступа и шесть типовых дыр с проверкой curl'ом.
13. rewrite, return, map и if
Фазы обработки, почему if опасен, и как заменить его на map.
-
13.1
return против rewrite
Будешь выбирать между ними осознанно, а не копировать со Stack Overflow.
-
13.2
map вместо if
Перепишешь любой опасный if на map или на отдельный location.
-
13.3
Конспект раздела: rewrite, return, map
Конвейер фаз и три следствия, замены для if и свежие CVE.
14. За пределами HTTP
Проксирование произвольного TCP и UDP, forward proxy, njs обзором - и справочник по остальным модулям стандартной сборки.
-
14.1
stream: TCP и UDP
Пропустишь через nginx базу или почтовый протокол, а не только HTTP.
-
14.2
Forward proxy, njs и остальные модули
Разберёшься, что появилось в nginx 1.31, и получишь карту всех остальных модулей стандартной сборки.
-
14.3
Конспект раздела: за пределами HTTP
http против stream, маршрут по SNI и что уже есть в стандартной сборке.
15. Эксплуатация
Как жить с nginx в проде: обновления без даунтайма, метрики и алерты, безопасные выкладки, разбор инцидентов.
-
15.1
Reload, обновление бинарника, systemd
Обновишь nginx на живом сервере без единого потерянного запроса.
-
15.2
Наблюдаемость и безопасные выкладки
Увидишь проблему раньше пользователей и выкатишь новую версию, не рискуя всеми сразу.
-
15.3
Разбор инцидентов
По симптому будешь быстро находить причину: 502, 504, 413, 499, worker_connections.
-
15.4
Конспект раздела: эксплуатация
Что делает reload и чего не делает, три метрики и порядок первых пяти минут.
16. Финальный проект
Собрать с нуля конфиг для реального стека и провести его через два десятка проверочных запросов.
-
16.1
Итоговый конфиг
Соберёшь прод-конфиг целиком: статика, API, WebSocket, TLS, кеш, лимиты.
-
16.2
Шпаргалка по всему курсу
Одна страница вместо перечитывания курса: шесть решений, все приоритеты, готовые блоки конфига, команды и карта «что делать, если».
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий