一、nginx配置 - conf文件
# worker_processes 1;
# events {
# worker_connections: 1024;
# }
upstream xk { //生成流 以权重转发请求
least_conn;
server localhost:667 weight=4;
server localhost:668 weight=2;
}
server {
listen 666;
server_name nginx配置;
location / {
proxy_pass http://xk;
}
}二、令牌桶
令牌桶算法:
系统按照指定速率生成令牌放入桶中,
当有请求进入时,会被拦截器拦截,拦截器从令牌桶中取出令牌,每个请求将消耗一个令牌才能通行,
如果令牌桶中没有令牌,请求将会被缓存
如果令牌桶中令牌满了,多余的令牌将会被丢弃
漏桶算法:
请求放入桶中,也就是缓存中
匀速处理请求
桶中溢出的请求将会被丢弃
nginx的请求速率限制模块采用的是漏桶算法,保证实时处理速率不会超过给定的阈值
三、限制配置实例
#速率限流配置 ipRateLimit
limit_req_zone $binary_remote_addr zone=ipRateLimit:10m rate=2r/s;
#并发量限流-单个IP控制 perip
limit_conn_zone $binary_remote_addr zone=perip:10m;
#并发量限流-整个服务控制 perserver
limit_conn_zone $server_name zone=perserver:10m;
#ip限制
allow 192.168.100.1;
allow 192.168.100.2;
#屏蔽IP段即从123.45.0.1到123.45.255.254访问的命令
deny 124.45.0.0/16
// deny all;
server {
listen 80;
server_name localhost;
location ~ .*\.(woff|ico|css|js|gif|jpg|jpeg|png)$ {
root /usr/local/openrestyDir/pages/;
}
location /msitems/ {
#限流配置
#limit_req zone=ipRateLimit burst=5 nodelay;
#并发量限流
limit_conn perip 20;
limit_conn perserver 100;
root /usr/local/openrestyDir/pages/;
}
}当Nginx接收到一个请求时,会按照配置中的顺序逐条执行 allow 和 deny 指令:
遇到
allow:如果请求的IP地址匹配到某个allow指令,Nginx 会立即允许该请求,后面的deny指令将不再被执行。遇到
deny:如果请求的IP地址匹配到某个deny指令,Nginx 会立即拒绝该请求,后面的allow指令同样不再被执行。