做什么
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
在哪配置
nginx的限流主要通过修改nginx.conf文件来进行。
限流方式
通过请求数限流
http {
limit_req_zone $binary_remote_addr zone=ip_addr_limit:10m rate=1r/s;
server {
server_name localhost;
listen 80;
location / {
proxy_pass http://localhost:8080/;
# 根据ip进行限流
limit_req zone=ip_addr_limit burst=1 nodelay;
limit_req_status 503;
}
}
}
参数说明:
$binary_remote_addr: binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流zone: ip_addr_limit是一块内存区域(记录访问频率信息),10m是指这块内存区域的大小rate: 1r/s = 1 request / second,类似于100/m(每分钟100次请求)burst: burst=1,设置一个大小为2的缓存区域,当大量请求到来,请求数量超过限流频率时,将其放入缓冲区域nodelay: 缓冲区满了后直接返回503异常limit_req_status: 超过请求数后返回的状态码,默认503
通过连接数限流
http {
limit_conn_zone $binary_remote_addr zone=ip_addr_limit:10m;
limit_conn_zone $server_name zone=server_addr_limit:10m;
server {
server_name localhost;
listen 80;
location / {
proxy_pass http://localhost:8080/;
# 每个服务最多保持100个连接
limit_conn server_addr_limit 100;
# 每个ip只能有一个连接
limit_conn ip_addr_limit 2;
limit_conn_status 503;
}
}
}
参数说明:
$binary_remote_addr: binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流$server_name: 表示通过服务器来限流zone: ip_addr_limit是一块内存区域(记录访问频率信息),10m是指这块内存区域的大小limit_conn: 连接数,使用方式为limit_conn zone number,number即为连接数limit_conn_status: 超过连接数后返回的状态码,默认503
参数连接:
Nginx限流
0