nginx有很多流量管理方法能方便我们进行诸如分流、流量管理、宽带管理和连接数管理等操作。
客户端分流
http {
split_clients "${remote_addr}AAA" $variant {
0.5% .one;
2% .two;
* "";
}
server {
listen 8080;
server_name localhost;
location / {
return 200 '$variant\n';
}
}
}
当客户端发送请求时,nginx会将${remote_addr}AAA中的remote_addr替换成相应的远程ip地址,并将替换后的拼接字符串作为Murmurhash2算法的输入,计算出结果值,如果结果值在前0.5%,返回在响应体中返回.one,如果结果落在0.5%~2.5%,则返回在响应体中返回.two,如果结果在剩下的区域中,则在响应体中返回空值

限制最大连接数
http {
limit_conn_zone $binary_remote_addr zone=limitbyaddr:10m;
limit_conn_status 429;
# ...
server {
# ...
# 限制最大连接数为2
limit_conn limitbyaddr 2;
# ...
}
}
表示在同一时间内,同一ip的并发连接数量在两个以内。
限制每秒请求数
http {
limit_req_zone $binary_remote_addr zone=limitbyaddr:10m rate=3r/s;
limit_req_status 429;
# ...
server {
# ...
limit_req zone=limitbyaddr;
# ...
}
}
限制同一个ip地址每秒只能发送3个请求。
限制下载带宽
location /downloads/ {
limit_rate_after 10m;
limit_rate 1m;
}
这两个指令都是对nginx服务器的上传带宽做限制的。limit_rate_after指令表示同一个连接在下载完10m之前是不会进行带宽限制的,而limit_rate则表示nginx服务在每个连接上的上行带宽限制。
发表回复