Когда речь заходит о NGINX, большинство сразу думают о HTTP-прокси. Но на самом деле он умеет работать и с TCP/UDP, начиная с версии 1.9.0 (с поддержкой модуля stream). Это отличный способ пробросить нестандартные протоколы - от MySQL до DNS.
▪️ Пример: TCP Reverse Proxy (например, для проброса SSH)
Включаем модуль stream и прописываем в конфигурации:
# /etc/nginx/nginx.conf
stream {
upstream ssh_backend {
server 192.168.1.100:22;
}
server {
listen 2222;
proxy_pass ssh_backend;
}
}
Теперь при подключении к NGINX по порту 2222, трафик будет перенаправляться на внутренний сервер по SSH-порту 22.
▪️ Пример: UDP Reverse Proxy (например, DNS)
stream {
upstream dns_backend {
server 192.168.1.53:53;
}
server {
listen 53 udp;
proxy_pass dns_backend;
}
}
Важно: UDP-прокси работает не со всеми типами UDP-протоколов - требуется тестирование.
▪️ Возможности stream-модуля:
📍 Load-balancing для TCP/UDP (с least_conn, round-robin)
📍 Проксирование SSL, SSH, MySQL, RDP и других нестандартных протоколов
📍 Поддержка access log, limit_conn, geo-блокировки
📍 Возможность защиты backend-ов без дополнительного софта
▪️ Полезные опции:
proxy_timeout 10s;
proxy_connect_timeout 5s;
proxy_protocol on;
proxy_protocol - если используется PROXY protocol от клиента (например, HAProxy).
timeout - не даём соединениям висеть вечно.
#nginx #reverseproxy
🧑💻 NetworkAdmin