# конспект · шаг 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 оправдан и что именно у него общее с соседними соединениями.
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий