Deși majoritatea utilizatorilor asociază Nginx exclusiv cu traficul HTTP/HTTPS (Layer 7), Nginx include un modul extrem de puternic numit Stream (ngx_stream_core_module) care operează la nivelul 4 al modelului OSI (Layer 4 – nivel de transport). Cu modulul Stream, Nginx poate acționa ca load balancer și proxy transparent de mare viteză pentru conexiuni TCP și UDP arbitrare: baze de date (MySQL, PostgreSQL), clustere Redis, servere de e-mail (IMAP/SMTP) sau servere DNS.
Configurarea unui Load Balancer TCP pentru MySQL în /etc/nginx/nginx.conf
# Atenție: Blocul 'stream' se definește la nivel rădăcină (NU în interiorul blocului 'http'!):
stream {
upstream mysql_backend {
# Algoritm de distribuire pe conexiunile cel mai puțin ocupate:
least_conn;
server 10.0.1.10:3306 weight=3 max_fails=2 fail_timeout=10s;
server 10.0.1.11:3306 weight=2;
server 10.0.1.12:3306 backup; # Folosit doar dacă primele două noduri cad
}
server {
# Nginx ascultă pe portul 3306 al serverului de gateway:
listen 3306;
proxy_pass mysql_backend;
# Timeout-uri de conectare:
proxy_connect_timeout 2s;
proxy_timeout 10m;
}
# Exemplu de proxy UDP pentru servere DNS:
server {
listen 53 udp;
proxy_pass 1.1.1.1:53;
proxy_timeout 1s;
}
}