做站长最怕的不是没流量,是服务器莫名其妙瘫了。Slowloris 这类慢连接攻击不发送大量请求,而是故意把连接拖住,耗光 Nginx 的 worker 进程。你的网站可能瞬间从“打不开”变成完全无响应。

应对思路很简单:给连接设置合理的超时阈值。客户端发完头部就超时、发body 也超时、整体发送还超时,三个时间窗口一收紧,攻击者就没了拖下去的空间。
http {
client_header_timeout 10s; #读取请求头超时时间
client_body_timeout 10s; #读取请求体超时时间
send_timeout 10s; #发送响应超时时间
keepalive_timeout 30s; #长连接保持时间
#限制单IP连接数,进一步压制慢连接
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
limit_conn addr 30;
}
}
这里的时间值不是越小越好。如果你的接口有上传大文件的功能,client_body_timeout 可以放宽到 60 秒,甚至针对上传路径单独写一个 location。核心原则是:正常用户用不上那么长时间。
配置改完后用nginx -t 检查语法,reload 平滑生效。可以用 slowhttptest 工具自己压测一下,看改成 10 秒后连接还能不能被挂住。真实业务里我习惯把这几个值默认设为 10 秒,上传接口单独放开。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!


