Nginx提升系统抗压防御力的核心是将其构建为智能流量闸门,在请求抵达后端前完成识别、限流、过滤与缓冲;需通过连接层限速(limit_conn/limit_req)、请求层过滤(禁用危险方法、拦截可疑路径、限制请求体大小及超时)、内核协同调优(somaxconn、tcp_max_syn_backlog、syncookies)及动态响应调节(proxy_next_upstream、缓冲、缓存)实现分层控制与精准协同。

Nginx 提升系统抗压防御力,核心不是堆硬件或买高防服务,而是把它用成一道“智能流量闸门”——在请求抵达后端前,就完成识别、限流、过滤和缓冲。关键在于分层控制、精准干预、协同内核,而不是单点配置。
连接层限速:防连接耗尽攻击
攻击者常建立大量短连接或长连接占满资源。Nginx 可通过 limit_conn 和 limit_req 模块直接控制:
- 用
limit_conn_zone $binary_remote_addr zone=addr:10m定义按 IP 的连接数限制区 - 在 server 或 location 块中加
limit_conn addr 10,即单 IP 最多保持 10 个并发连接 - 配合
limit_req zone=burst burst=20 nodelay控制请求速率(如每秒 5 个,允许最多 20 个突发)
注意:burst是令牌桶缓冲,nodelay表示不延迟排队,超量直接 503;若需平滑处理,去掉nodelay并配合delay参数
请求层过滤:拦截异常模式
不是所有请求都该被放行。Nginx 能基于 HTTP 特征做轻量级筛查:
- 禁用危险方法:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS|PATCH)$) { return 405; }(慎用 if,建议结合limit_except) - 拦截可疑路径:
location ~* \.\.|etc/passwd|proc/self|\.php\.s$ { return 403; } - 限制请求体大小:
client_max_body_size 10M;防止大文件上传打爆内存 - 设置合理超时:
client_header_timeout 10; client_body_timeout 10; send_timeout 10;避免慢速攻击(Slowloris)
与内核协同:打通 TCP 层瓶颈
Nginx 再强,也受限于底层网络栈。必须同步调优三个关键参数:
- Linux 内核:
net.core.somaxconn = 65535(全连接队列)、net.ipv4.tcp_max_syn_backlog = 65535(半连接队列) - Nginx listen 指令:
listen 80 backlog=65535;(显式声明,不能依赖默认值) - 启用兜底机制:
net.ipv4.tcp_syncookies = 1,当 SYN 队列满时启用 Cookie 握手,避免丢包
改完 sysctl 后必须重载 Nginx(systemctl reload nginx),否则新 backlog 不生效
动态响应调节:减轻后端压力
Nginx 可主动降低对后端的冲击:
-
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;让失败请求自动转发到其他上游节点 -
proxy_buffering on; proxy_buffer_size 128k; proxy_buffers 4 256k;缓冲响应体,避免后端慢导致连接长期占用 - 对静态资源启用
expires 1h; add_header Cache-Control "public, max-age=3600";减少重复请求
不复杂但容易忽略


















