1. 1

# конспект · шаг 1 из 1

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

выжимка - её можно унести в заметки

Раздел про то, что nginx умеет помимо обычного HTTP-прокси.

Три темы

stream          TCP и UDP без URI и заголовков: базы, почта, DNS, TLS по SNI
forward proxy   CONNECT для исходящего трафика сотрудников (1.31.0)
модули          то, что уже в коробке: json_set, mirror, split_clients, njs…

http против stream

http stream
единица запрос соединение
маршрутизация URI, заголовки, location порт, транспорт, SNI
коды ответа видит клиент видит только лог: 200, 403, 502, 503
переменные $request, $uri, $host их нет; есть $protocol, $session_time
логи включены, формат общий выключены по умолчанию, формат свой

Что решает stream

ssl_preread on;                     # маршрут по SNI, не расшифровывая трафик
listen 53 udp;                      # UDP - отдельный сокет
proxy_responses 1;                  # иначе сессия живёт до proxy_timeout
proxy_protocol on;                  # передать адрес клиента дальше
pass 127.0.0.1:8443;                # отдать своему же сокету, сохранив адрес

Виртуальные серверы и pass в stream появились в 1.25.5 - старое правило «в stream нет server_name» устарело. Но server_name без ssl_preread молча отправляет весь трафик в первый блок.

Дерево решений

трафик HTTP?            → http-блок, всегда
исходящий CONNECT?      → tunnel_pass + resolver
TLS чужих сервисов?     → stream + ssl_preread, маршрут по SNI
первым говорит сервер?  → stream БЕЗ ssl_preread, иначе 30 секунд и обрыв
директив не хватает?    → сначала json_set, map, auth_request; njs последним

Прежде чем ставить сторонний модуль

Проверь коробку: json_set (значение из JSON), mirror (копия трафика), split_clients (A/B и канарейка), secure_link (подписанные ссылки), sub_filter, stub_status, geo, realip, njs. И проверь сборку: nginx -V на чужом сервере объясняет половину «у нас это не работает».

Чек-лист: что ты должен уметь объяснить

  • Почему в stream нет location и что вместо него.
  • Как маршрутизировать TLS-трафик, не расшифровывая его, и чем за это платишь.
  • Чем listen … udp отличается от обычного и что такое proxy_responses.
  • Почему tunnel_pass пишется без аргументов и зачем ему resolver.
  • Когда njs оправдан и что именно у него общее с соседними соединениями.

Комментарии

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

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

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