stream модуль (TCP/UDP)

Тема дорожной карты · Nginx

Модуль stream в Nginx расширяет возможности Nginx за пределы HTTP, обеспечивая проксирование и балансировку нагрузки для сырого трафика TCP и UDP, превращая Nginx в универсальный шлюз для таких протоколов, как MySQL, PostgreSQL, Redis, SMTP, DNS и любой пользовательский бинарный протокол. Контекст stream — это блок верхнего уровня в nginx.conf, параллельный контексту http; он содержит блоки upstream и server, использующие proxy_pass для перенаправления TCP-соединений или UDP-датаграмм на бэкенд-серверы. Для включения модуля stream Nginx должен быть скомпилирован с --with-stream, что входит в пакет nginx-full в большинстве дистрибутивов Linux; директива load_module modules/ngx_stream_module.so используется при динамической загрузке модулей. В отличие от HTTP-проксирования, балансировка TCP/UDP через модуль stream является протоколо-независимой и работает на транспортном уровне, поддерживая алгоритмы балансировки round-robin, least connections и IP hash вместе с проверками работоспособности через ngx_stream_upstream_hc_module. Используя модуль stream Nginx, операторы могут запускать один экземпляр Nginx, который одновременно обрабатывает HTTPS-трафик через контекст http и пул соединений к базам данных или ретрансляцию почты через контекст stream, упрощая топологию инфраструктуры.

Как это работает

stream модуль (TCP/UDP) покрывает third-party модули: ngx_brotli (сжатие), ngx_http_geoip2 (GeoIP-решения), ngx_pagespeed (HTTP-оптимизация, upstream deprecated — см. Google PageSpeed Insights), ngx_http_lua (OpenResty — Lua-скриптинг внутри nginx), ngx_http_secure_link (подписанные URL), ModSecurity (WAF), naxsi (WAF проще). OpenResty пакетирует nginx + Lua + много модулей — частая основа для API-шлюзов (Kong, APISIX).

Когда применять

OpenResty — когда нужна реальная программируемость в request-пути (кастомная auth, продвинутый rate limit, динамический routing); Lua быстр + безопасен внутри nginx. ModSecurity или naxsi — когда WAF обязателен по compliance (PCI-DSS); но CDN с встроенным WAF (Cloudflare, Yandex Cloud Smart Web Security) обычно проще. ngx_brotli — для лучшего сжатия текста.

Типичные ошибки

Ловушки stream модуль (TCP/UDP): сложная Lua в OpenResty, которую никто в команде не дебажит (knowledge silo); ModSecurity rule sets, блокирующие легитимный трафик (false positives — тюньте осторожно); кастомные модули требуют пересборки nginx (используйте distro-пакеты или Docker-образы с ними).

Связанные понятия

Полезные ресурсы