Nginx 1.9.13开始支持UDP负载匀衡,现代应用通常使用多种协议,很多核心Internet协议都早于HTTP,支持UDP势在必行。
UDP常用于非事务性的轻量级协议,如:DNS、syslog、RADIUS。
这些协议对可靠性没有严格要求,若UDP消息(数据报)丢失,客户端可在超时后重新发送。
UDP配置
# Load balance UDP-based DNS traffic across two servers stream {upstream dns_upstreams {server 192.168.136.130:53;server 192.168.136.131:53;}server {listen 53 udp;proxy_pass dns_upstreams;proxy_timeout 1s;proxy_responses 1;error_log logs/dns.log;} }
NGINX在53端口接收到UDP数据报,使用负载平衡算法(默认:轮询/Round Robin)选择后端服务,等待后端服务响应,并将响应返回客户端。
若后端服务无法响应,NGINX将其标记为“失败”,并暂停向此服务发送数据报。每隔几秒钟,NGINX会向服务器发送较小流量检查服务状态,确认服务是否恢复。
UDP不保证数据的端到端传递,要求客户端能够处理网络级错误和重传。
当客户端无法连接到首选服务器时,则必须等待超时才能尝试其他服务器。这会在UDP事务中引入冗长的延迟。
NGINX高可用性和负载平衡可消除或减少此类延迟。
客户端将UDP请求发送到NGINX,负载均衡器监视UDP服务器运行状况和可用性,避免将请求发送到故障或过载服务器。