nginx负载均衡器通过连接控制、请求限速、健康感知和资源节流削弱dos/ddos冲击:收紧tls握手(ssl_handshake_timeout 5s)、请求头超时(8s)、长连接保持(25s)并启用reset_timedout_connection;限制单ip并发连接(limit_conn)与请求速率(limit_req);配置max_fails/fail_timeout被动剔除+proxy_next_upstream主动重试;优先least_conn调度,按权重分配,设置backup节点防雪崩。

收紧连接生命周期,快速释放无效连接
长时间空闲或半开连接会迅速耗尽 worker 进程的文件描述符和内存。必须用精准超时逼退低质量连接:• ssl_handshake_timeout 5s:仅 Nginx 1.19.0+ 支持,强制 TLS 握手在 5 秒内完成,防 Slow SSL 类攻击
• client_header_timeout 8s:客户端必须在 8 秒内发完全部请求头,防 Slow Headers
• keepalive_timeout 25s:长连接保持时间设为 25 秒左右,兼顾复用效率与连接积压风险
• reset_timedout_connection on:对超时连接发送 RST 包,而非 FIN,更快回收内核连接状态
限制单 IP 并发连接与请求速率
攻击者常靠并发建连或高频请求打垮后端。需在入口层做硬性约束:• 在 http 块定义连接限制区:limit_conn_zone $binary_remote_addr zone=perip_conn:10m;
• 在 server 或 location 中启用:limit_conn perip_conn 15;(建议值 10–20,按业务容忍度调整)
• 同时配置请求限速:limit_req_zone $binary_remote_addr zone=perip_req:10m rate=30r/m;
• 在关键路径(如 /api/、/login)加:limit_req zone=perip_req burst=10 nodelay;(burst 容忍短时脉冲,nodelay 避免排队延迟,超限直接返回 503)
增强上游健康感知与自动隔离
被动失败探测(请求失败才剔除)会导致卡顿节点持续接收新请求。必须引入轻量级主动规避机制:• 在 upstream 中为每台后端显式设置:server 192.168.1.10:8080 max_fails=2 fail_timeout=30s;
• 表示:30 秒内连续 2 次失败即标记不可用,屏蔽 30 秒后自动重试
• 配合 proxy_pass 使用:proxy_next_upstream error timeout http_500 http_502 http_503;,让 Nginx 在遇到这些响应时主动换节点
• 若后端支持 HTTP 探活,可配合外部脚本或使用 OpenResty + lua-resty-upstream-healthcheck 模块实现周期性探活
按能力调度并设置备用节点
平均分配请求在异构集群中极易导致弱节点率先崩溃。应避免“轮询即公平”:• 优先选用 least_conn 策略(尤其适用于长连接、耗时接口),让请求落到当前活跃连接最少的节点
• 若服务器性能差异大(如 4C8G 与 8C16G 混用),搭配 weight 显式赋权:server a:8080 weight=3;
• 为关键服务预留 backup 节点:server 192.168.1.99:8080 backup;,主节点全不可用时才启用,避免雪崩扩散











