spice and wolfspice and wolf Be the One you wanna Be

nginx流量管理

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服务在每个连接上的上行带宽限制。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Press ESC to close