在 Nginx 中,limit_req 和 limit_conn 是两个用于限制客户端请求的指令,它们分别用于限制请求速率和并发连接数。
limit_req
limit_req 用于限制请求速率,防止客户端发送过多请求影响服务器性能。它通过 limit_req_zone 指令定义一个共享内存区域,用于存储请求的状态信息,然后在 location 块中使用 limit_req 指令来限制请求速率。
limit_req_zone:定义一个共享内存区域,用于存储请求的状态信息。
http {limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
}
$binary_remote_addr:使用客户端的 IP 地址作为键。
zone=req_zone:10m:定义一个名为 req_zone 的共享内存区域,大小为 10MB。
rate=1r/s:设置速率限制为每秒 1 个请求。
limit_req:在 location 块中应用请求速率限制
server {location / {limit_req zone=req_zone burst=5 nodelay;}
}
zone=req_zone:指定使用之前定义的共享内存区域 req_zone。
burst=5:允许最多 5 个突发请求。
nodelay:不延迟处理突发请求。
limit_conn
limit_conn 用于限制并发连接数,防止客户端占用过多服务器资源。它通过 limit_conn_zone 指令定义一个共享内存区域,然后在 location 块中使用 limit_conn 指令来限制并发连接数。
limit_conn_zone:定义一个共享内存区域,用于存储连接的状态信息。
http {limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
}
$binary_remote_addr:使用客户端的 IP 地址作为键。
zone=conn_zone:10m:定义一个名为 conn_zone 的共享内存区域,大小为 10MB。
limit_conn:在 location 块中应用并发连接数限制。
server {location / {limit_conn conn_zone 5;}
}
总结
limit_req:用于限制请求速率,防止过多请求影响服务器性能。
limit_conn:用于限制并发连接数,防止客户端占用过多服务器资源。