====== DNS Load Balancing ====== **General Information** DNS load balancing with Nginx streams. **Checklist** * Install Nginx ---- ====== Main Config File ====== Replace the entire main config (/etc/nginx/nginx.conf) with: ## NGINX - Main Configuration ## # Context: Main - General Server Configuration # User that worker processes run as user nginx; # Number of worker processes (auto = set to number of CPUs) worker_processes auto; # Error logging and PID of main process error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; # Include enabled configurations include /etc/nginx/conf.d/enabled/*.conf; # Context: Events - Connection Processing events { # Max number of connections per worker process worker_connections 1024; } # No http contexts because we are doing stream processing with the included drop in files ---- ====== Nginx DNS Load Balance Stream Config ====== Stream config drop in file. /etc/nginx/conf.d/available/dns_loadbalance.conf stream { # Stream Logging Setup log_format proxy '"Src:$remote_addr" [$time_local] ' '"Prot:$protocol" "Status:$status" "Sent:$bytes_sent" "Recv:$bytes_received" ' '"SesTime:$session_time" "DNS:$upstream_addr" ' '"Sent:$upstream_bytes_sent" "Recv:$upstream_bytes_received" "ConnTime:$upstream_connect_time"'; # Log Location access_log /var/log/nginx/dns_access.log proxy; # Backend DNS Servers upstream dns_servers { # Balancing Type: Least Connections least_conn; # Passive Health Checks (defaults): fail_timeout=10, max_fails=1 # (server marked down if 1 failure in 10 second period and stays down for 10 seconds) # weight=5 : use these dns servers 5 times more than others with no weight server 192.168.1.1:53 weight=5; server 192.168.1.2:53 weight=5; server 192.168.1.3:53; } # Frontend listener server { listen 53 udp; proxy_pass dns_servers; # Bind response to interface request was received on proxy_bind $server_addr; proxy_timeout 1s; proxy_responses 1; error_log /var/log/nginx/dns_errors.log; } } ----