在Nginx中,可以使用limit_req
和limit_conn
指令来实现请求的限制。这两种方式分别用于限制特定的请求速率和连接数。
1.使用 limit_req
限制请求速率
limit_req
允许限制每个客户端在一定时间内的请求次数。 比如可以设置每秒只允许20次请求:
http {
# 定义一个限流区域
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=20r/s;
}
server {
location /api/endpoint {
# 应用到具体的location上
limit_req zone=mylimit burst=20 nodelay;
}
}
limit_req_zone: 定义限流区域
$binary_remote_addr:用来识别客户端地址
zone=mylimit:10m:定义了一个名为mylimit的区域
rate=20r/s:表示每秒最多20个请求
limit_req: 在具体的location中应用限流规则
burst=5:允许在短时间内爆发式发送请求
nodelay:表示如果超过限制立即拒绝请求
2.使用 limit_conn
限制连接数
limit_conn
用于限制同时打开的连接数。比如限制每个IP的最大连接数为10:
http {
limit_conn_zone $binary_remote_addr zone=myconn:10m;
}
server {
location /api/endpoint {
limit_conn myconn 10;
}
}
limit_conn_zone: 定义一个连接限制区域,与limit_req_zone类似
limit_conn: 在location中应用连接限制,myconn 10表示限制每个IP的最大连接数为10
3.总结
limit_req和limit_conn都需要在http块中先定义对应的zone,然后才能在server或location块中使用。
limit_req和limit_conn都是基于Nginx内部状态进行跟踪的,如果Nginx是集群部署,需要确保所有节点共享这些状态信息。
这样配置后,Nginx就能够有效地控制服务器上的请求流量,防止过载。