Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

NGINX_STREAM_ERROR Linux / DevOps

Настройка проксирования TCP/UDP трафика в Nginx: модуль Stream

Обновлено: 21.08.2026
  • Необходимость балансировки баз данных (PostgreSQL, MySQL, Redis) на транспортном уровне L4.
  • Ошибка "stream" directive is not allowed here при добавлении настроек в nginx.conf.
  • Сброс клиентских TCP-сессий при длительном неактивном соединении (Keepalive / idle timeouts).

1. Подключение модуля Stream

Убедитесь, что модуль установлен и загружен в корневом файле /etc/nginx/nginx.conf (вне блока http {}):

load_module modules/ngx_stream_module.so;  # Если модуль динамический

2. Настройка проксирования TCP (Балансировка PostgreSQL / MySQL)

Добавьте блок stream в /etc/nginx/nginx.conf или создайте /etc/nginx/stream.d/db.conf:

stream {
    upstream postgresql_cluster {
        least_conn;
        server 10.0.1.50:5432 max_fails=3 fail_timeout=10s;
        server 10.0.1.51:5432 max_fails=3 fail_timeout=10s;
    }

    server {
        listen 5432;
        proxy_pass postgresql_cluster;
        proxy_connect_timeout 5s;
        proxy_timeout 3h; # Таймаут удержания сессии
    }
}

3. Настройка балансировки UDP (DNS проксирование)

stream {
    upstream dns_backends {
        server 1.1.1.1:53;
        server 8.8.8.8:53;
    }

    server {
        listen 53 udp;
        proxy_pass dns_backends;
        proxy_timeout 2s;
        proxy_responses 1;
    }
}

4. Проверка и перезагрузка

nginx -t && systemctl reload nginx

5. Проверка прослушивания портов

ss -tulpn | grep -E "5432|53"
💡 Практика специалистов: Для TCP-стримов параметр proxy_timeout по умолчанию равен 10 минутам. Для длительных транзакций баз данных обязательно увеличивайте его до нескольких часов (3h-24h), чтобы Nginx не разрывал активные соединения клиентов.

Частые вопросы (FAQ)

Почему директиву stream нельзя помещать внутрь блока http?

Модуль ngx_stream_core_module работает на транспортном уровне L4 (TCP/UDP), в то время как блок http работает на прикладном уровне L7 (HTTP/HTTPS). Они являются независимыми корневыми контекстами Nginx.

Что означает директива proxy_responses 1 для UDP?

Она сообщает Nginx, сколько ответных UDP-датаграмм ожидать от вышестоящего бэкенда перед закрытием сессии (стандартно 1 ответ на 1 DNS-запрос).

Полезные материалы
Рекомендуем